SWE notes
492 subscribers
19 photos
3 videos
293 links
Канал про разработку ПО и технологии.

В нем я делюсь как авторскими материалами из своего блога https://www.swe-notes.ru так и полезными ссылки на другие ресурсы

По вопросам сотрудничества обращаться @kuznetsovin
Download Telegram
Forwarded from addmeto (Grigory Bakunov)
Боже, это просто чудесная утренняя история: исследователь безопасности заметил в статье сотрудника PayPal упоминание нескольких внутренних пакетов, в т.ч. analytics-paypal. И для эксперимента разместил пакет с таким же названием в публичном репозитории. И что вы думаете, конечно же часть внутреннего софта от PayPal собралась с использованием его пакета, который "стучал на землю" ему в сервера.

Как следствие исследователь провернул совершенно аналогичную атаку на почти все крупные айти компании-гиганты. И если подумать, я знаю где у меня совершенно такие же проблемы, пойду чинить https://www.bleepingcomputer.com/news/security/researcher-hacks-microsoft-apple-more-in-novel-supply-chain-attack/
​​В свежих сборках Chrome появилась возможность записывать сценарии действий пользователя в скрипты на Javasript. То есть открываете нужную страницу в бразере, в DevTools включаете запись действий и делаете что-то на странице обычным образом. По мере выполнения действий браузер генерирует Javascript код, описывающий через API Puppeteer все ваши действия. После этого запись можно остановить, и сохранить полученный код.

https://developers.google.com/web/updates/2021/01/devtools#record

P.S. За конкуренцией в области сокращения расходов на автоматизацию тестирования WebUI становится интересно следить. Помимо встроенной в Chrome поддержки записи сценариев ещё есть: Selenium IDE, который не так давно реанимировали после длительного анабиоза, есть коммерческие сервисы, призванные снизить порог вхождения в автоматизацию тестирования Web UI (например малоизвестные у нас стартапы testRigor или Virtuoso QA) и у них тоже есть расширения для записи сценариев. Про Cucumber и прочие BDD-like решения я даже и не говорю.
Наткнулся сегодня на интересный продукт по анализу данных apache Superset. С первого взгляда, мне показалось что продукт очень похож на Zeppelin, про который я раньше писал, но при этом даёт больше интерактивности при работе с данными..

Как только появиться время ознакомлюсь по подробней и напишу обзорчик

#analitycs #bi #python #olap


https://github.com/apache/superset
Howto по использованию новую директиву go:embed, с помощью которой можно упаковывать файлы ресурсов в бинарник Go и появится она в Go 1.16.


#go #goembed

https://blog.carlmjohnson.net/post/2021/how-to-use-go-embed/
Верхнеуровневое введение во flatter и его архитектуру для новичков и тех кто хочет познакомиться в общих чертах с эти фреймворком

#flatter #desktop #mobile #crossplatform

https://thedailyprateek.hashnode.dev/developing-cross-platform-applications-using-flutter
Хорошее руководство для тех, кому предстоит изменять структуру базы данных PostgreSQL с большими массивами данных без downtime:

"PostgreSQL at Scale: Database Schema Changes Without Downtime" by James Coleman
https://medium.com/braintree-product-technology/postgresql-at-scale-database-schema-changes-without-downtime-20d3749ed680

#Database #PostgreSQL
Статья о том как происходит выполнение HTTP запроса при работе со стандартной библиотекой в Go

#go #http #web #std

https://eli.thegreenplace.net/2021/life-of-an-http-request-in-a-go-server/
Forwarded from SDCast
SDCast #129: в гостях Игорь Кузнецов, тимлид в компании «GOST GROUP»

Встречайте 129-й выпуск подкаста. У меня в гостях Игорь Кузнецов, тимлид в компании «GOST GROUP». В этом выпуске мы говорим про консалтинг и продуктовую разработку, как давать первичную оценку проектам по трудозатратам и срокам. Обсуждаем повседневные задачи тимлида, выбор техонологий и стэка, собеседования и текучку кадров. Подискутировали на тему: когда и надо ли брать Open…

https://sdcast.ksdaemon.ru/2021/02/sdcast-129/
> в любой команде есть какие-то законы, которые придуманы фиг пойми для чего

Вот это основная суть статьи. Это - самая главная проблема в разработке. И это касается не только правил, но и кода:

📝 "A six-month study conducted by IBM found that maintenance programmers “most often said that understanding the original programmer’s intent was the most difficult problem”" - Fjelstad and Hamlen

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

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

Но даже когда намерения автора понятны, должна быть возможность выполнить задачу в существующем коде, т.е. изменить код автора. Если код представлен лапшой, то придется изменять много кода, изменения будут лавинообразными. По этому поводу хорошо рассуждал Kent Beck: https://xn--r1a.website/emacsway_log/188

Чтобы код не был лапшой, нужно изолировать изменения. Поэтому, второе самое важное правило Software Design - это принцип "Low Coupling & High Cohesion" ( http://wiki.c2.com/?CouplingAndCohesion ), сформированный еще в 1974 году. Главное правило рыбака - не дать запутаться леске. Главное правило программиста - тоже не запутаться в коде.

И, наконец, третье важное правило - чтобы что-то изменить, нужно понять, как оно работает сейчас. А для этого нужно иметь возможность рассмотреть фрагмент программы изолированно, чтобы сложность рассматриваемого фрагмента не превысила ограниченные возможности краткосрочной памяти человека.
https://ru.m.wikipedia.org/wiki/%D0%9C%D0%B0%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE_%D1%81%D0%B5%D0%BC%D1%8C_%D0%BF%D0%BB%D1%8E%D1%81-%D0%BC%D0%B8%D0%BD%D1%83%D1%81_%D0%B4%D0%B2%D0%B0

Именно поэтому Гради Буч и сказал, что архитектура - это многоуровневая система абстракций. Где назначение абстракции - управление сложностью.

> От навязанных необоснованных ограничений мы получаем выгорание.

Тут он говорит то же самое. Объектом критики выступают не сами правила, а отсутствие понимания причин этих правил. Именно поэтому, одной из самых ключевых практик Agile-разработки является Collaborative Development (т.е. методики распространения знаний). Понимание - единственная причина, позволяющая гарантировать соблюдение правил.

Таким образом, цель правил должна сводиться не к "читабельности", а к сохранению линейного (асимптотического) характера роста стоимости изменения кода, чтобы не позволить ему свалиться в экспоненту. И на достижение этой цели должно быть направлено Code Review.

#SoftwareDesing
Forwarded from addmeto (Grigory Bakunov)
Что бы вы понимали, какие последствия бывают у недостатков софта: из-за бага (точнее из-за недоделки) системы сотни осужденных продолжают оставаться за решеткой в Аризонской тюрьме. Невероятно поучительная история https://kjzz.org/content/1660988/whistleblowers-software-bug-keeping-hundreds-inmates-arizona-prisons-beyond-release
Статья в которой неплохое сравнение sql и nosql бд с описанием их плюсов и минусов и в каких случаях что лучше использовать... В целом я согласен с описанным в статье

#sql #nosql #mongodb #postgresql

https://m-cacm.acm.org/blogs/blog-cacm/250843-nosql-vs-sql/fulltext
Один из лучших моих товарищей, широко известный в архитекторских кругах Москвы, запустил новый проект. Я хотел бы обратить внимание на информацию от коллектива проекта:

Мы убеждены, что единица продуктивности - это команда, а не отдельные люди. Мы видим ценность в командах и хотим предложить площадку для команд разработки.
На площадке
http://topteams.ru команды публикуют контактную информацию, обезличенные резюме, портфолио, и технологии, на которых специализируются. Мы уже начали привлекать корпоративных заказчиков, которым требуются слаженные команды разработчиков. Сейчас вы можете создать профиль команды и делиться ссылкой с партнерами. Сервис TopTeams бесплатный для команд.
Будем рады видеть вас на площадке TopTeams.
Сегодня вышел flutter 2.0 и это прям большое событие, потому что null safety, flutter web и flutter desktop теперь официально в stable.

#flutter

https://medium.com/flutter/whats-new-in-flutter-2-0-fe8e95ecc65
Интересное решение сделать встраиваемую NoSQL бд (на подобии MongoDB) недавно как раз думал над ним для использования в небольших сервисах, а оказывается уже есть...

#NoSQL #MongoDB #golang

https://github.com/256dpi/lungo
SWE notes
Если вы любитель CLI и часто работаете с json вам может быть полезна следующая статья https://sequoia.makes.software/parsing-json-at-the-cli-a-practical-introduction-to-jq-and-more/ #json #bash #cli #python #jq
Еще одна полезная находка для тех кто часто работает с различными форматами данных и любит CLI. Утилита позволяет делать запросы по структурированным документам таким как XML, CSV, JSON, а также конвертировать их между собой. Кроме того поддерживается работа с БД

#sq #golang #bash #csv #json

https://sq.io
Не знаю зачем так делать, но вдруг кому-то пригодится работать с Pandas (такая библиотека для работы с данными на python) внутри PostgreSQL

#postgresql #pandas #python

https://blog.crunchydata.com/blog/recommendation_engine_in_postgres_with_pandas_and_python
Для тех кто считает что jsonb в postgresql может заменить монгу, очень рекомендую ознакомиться со статьёй ниже об особенностях его работы и хранения

#postgresql #jsonb

https://scalegrid.io/blog/using-jsonb-in-postgresql-how-to-effectively-store-index-json-data-in-postgresql/
Есть такой сервис airtable (https://airtable.com), который представляет из себя облачную бд (читай Excel), так вот теперь появилась вот сегодня нактунался на его self-hosted альтернативу baserow (https://baserow.io)

#airtable #python #selfhosted