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

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

По вопросам сотрудничества обращаться @kuznetsovin
Download Telegram
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
Ну и еще одно self-hosted решение Focalboard (https://www.focalboard.com/), которое является альтернативой для таких продуктов как Trello и Asana

#go #trello #selfhosted
В последнее время я увлёкся изучение вопроса ИБ и чтобы лучше разобраться в теме инжекта кода написал статью о том как это сделать в Linux.

#go #c #security #ld_preload

https://www.swe-notes.ru/post/ld-preload-golang/
Forwarded from Кавычка (Bo0oM)
Вчера в официальном репозитории PHP на Github появилось два бэкдора, позволяющие выполнять произвольный код.
Что произошло - неясно. Однако разработчики сообщают о возможной компрометации git.php.net.

Дело точно не во взломанных аккунтах разработчиков. А user-agent “zerodium” и “sold to zerodium, mid 2017”, кагбе, намекает
Forwarded from addmeto (Grigory Bakunov)
Допрыгались. Zoom больше не продаёт свои услуги российским государственным предприятиям. В первую очередь пострадают образовательные учреждения конечно. // Подписаться на канал «42 секунды» можно через @fortytwo_Invite_bot
Forwarded from Cybersecgame (Oleg)
По техническим причинам ассортимент сырного отдела уменьшен. Приносим извинения за доставленные неудобства

Ransomware через уязвимость в Exchange пробрался в сеть логистической компании Bakker, и крупнейшая голландская сеть супермаркетов Albert Heijn осталась... без сыра. То есть вообще — уже десять дней там пустые полки. Хотя, вроде, наконец проблема решилась, и сыр скоро снова поступит.
Хорошее описание набора уязвимостей Bluetooth в ядре Linux, которые могут позволить выполнить произвольный код с привелегиями ядра.

#security #linux #bluetooth #rce

https://google.github.io/security-research/pocs/linux/bleedingtooth/writeup.html