Задать вопрос
  • Как повысить свои навыки в построении архитектуры сложных приложений?

    @Arlekcangp
    Разработчик, Лид, Архитектор ПО
    1. Хорошо помогает начать изучение с простых паттернов проектирования. Прежде всего это простые и понятные паттерны типа "стратегия", "команда", "итератор", "шаблонный метод", "посредник", "цепочка обязанностей". Изучив и поняв эти паттерны вы посмотрите на ООП по новому: не как просто структурированный код плюс данные в одном объекте, а именно как задумывалось его создателем - объект самостоятельная единица взаимодействующая с другими такими же посредством сообщений. Причём она является first class также как в функциональном программировании функция. К тому же на указанных паттернах строятся и остальные. Например, фабричный метод - это частный случай шаблонного метода. Так постепенно придет понимание куда и зачем применять различные паттерны.
    2. Когда решаете какую-либо задачу, думайте о нескольких вариантах архитектуры для её решения. Далее старайтесь выбирать
    вариант не на основе личных предпочтений или предыдущего опыта (не важно, положительного или отрицательного), а на основе анализа, какой из вариантов здесь реально потребуется с точки зрения дальнейшего развития проекта. Предыдущий опыт также надо учитывать, но все проекты разные, требования разные, и каждая ситуация может отличаться. Надо смотреть как могут изменяться или расшириться системные и функциональные требования (разумеется, для этого надо быть в контексте этих требований - т е знать их самих, манеру работы с проектом заказчика и т д) Во многих случаях, когда вы не сможете выбрать из-за недостатка информации, это логически подведёт вас задавать заказчику дополнительные вопросы. И через этот итеративный процесс приходит понимание, где и как применять паттерны.
    3. Обратите внимание на паттерны ERP систем (для примера книга "Шаблоны корпоративных приложений" Мартин Фаулер) Особенное внимание надо уделить такому шаблону как инверсия зависимостей. Данный шаблон лично мне помог совершенно по другому взглянуть на ООП (во второй раз, уже после того как я стал применять другие паттерны ООП) Вот здесь https://blog.byndyu.ru/2009/12/blog-post.html очень понятно на мой взгляд описано (язык C# но всё тоже самое будет для любого ОО языка) Кроме того в этом блоге много всего по проектированию и рефакторингу.
    4. Обратите внимание на книгу "Growing Object-Oriented Software, Guided by Tests" Стив Фриман Перевод на русский не гуглится, возможно его и нету. Но книга полезна тем, что в отличие от многих других книг по TDD в ней разбирается не только методика тестирования и написания тестов, но и принцип тест -> код -> рефакторинг. И разбирается на достаточно длинном примере. Из неё вы можете подчерпнуть привычку рефакторить, а не переписывать заново. Причём даже если у вас на проекте цикл другой - например тесты пишутся после функционала, всё равно образ мысли изменится и масштабный рефакторинг не будет вызывать непреодолимого желания выбросить и переписать с нуля.
    5. По рефакторингу могу порекомендовать книгу "Работа с унаследованным кодом" Майкл Физерс. Кроме того об этом много статей в уже упомянутом блоге Александра Бындю. Грубо говоря я бы назвал ту подборку статей "как не переписывать и начать жить"
    6. Ещё один блог где собрано большое количество полезных материалов по ООП, рефакторингу, проектированию, это блог Сергея Теплякова Вот ссылка на его подборку книг по теме: sergeyteplyakov.blogspot.com/2013/08/blog-post.html
    7. Изучайте материалы постепенно. Не стоит сразу пытаться воткнуть только что полученные знания в первый попавшийся проект. Обсуждайте возможные решения с коллегами. Со временем они также станут поддерживать эту практику. Если есть возможность, попрактикуйте парное программирование. Причём не обязательно с более опытным коллегой. Иногда вопросы задаваемые наивным человеком заставляют задуматься гораздо крепче, чем ответы получаемые от мудрецов.
    Ответ написан
    1 комментарий
  • Как создать контейнер приложения, которое развернуто?

    @rPman
    в общем случае это невозможно
    docker файл это список команд, которые необходимо выполнить на 'нулевой системе' чтобы приложение заработало

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

    в некоторых случаях, пакетный менеджер linux предлагает вполне законченное описание того что нужно для того чтобы приложение заработало, к сожалению в реальности не все так просто, не все приложения корректно описаны, а для некоторых требуется ручная первоначальная настройка
    Ответ написан
    2 комментария
  • От чего компьютер решил просыпаться?

    Varikorek
    @Varikorek
    Python разработчик ботов, и Java Mobile Dev.
    выспался))
    Ответ написан
    Комментировать
  • Как повысить свои навыки в построении архитектуры сложных приложений?

    MDiMaI666
    @MDiMaI666
    Талантливый программист
    Делать много много и расширять зону ответственности. И сам додумаешься. Главное будешь знать не как а зачем так делать. Только практика.
    Ответ написан
    Комментировать
  • Юридические последствия бага на сайте?

    @rPman
    В российским законодательстве есть необходимость в умысле и понесенных убытках.
    Если нет умысла и тем более нет убытков, то по уму сложно будет что то сделать.

    Ок, если умысел еще можно притянуть за уши если доказать что разные аккаунты принадлежат атакующему, то с убытками не все так просто.

    Про скидку, если ее размер не уменьшает стоимость товара до ниже ее закупочной, то убытков нет, есть только упущенная прибыль которая точно не может быть основанием к угловно-админестративного преследования.
    Надо читать в лицензионном соглашении и описании про скидки

    Пользователи не должны нести ответственность за ошибки, которые допускает магазин... поставьте себя на место двух разных пользователей, которые случайно совершили покупку используя один скидочный купон (не обсуждаем сейчас вероятность этого события), почему они должны нести какое-либо наказание за это?

    p.s. помним, что цена на ценнике имеет приоритетное значение тому что ожидает магазин, в момент совершения покупки цена была озвучена? оплачена клиентом в полном размере? помним про то как человек купил телевизор по цене 0 (ошибка на сайте интернетмагазина, после которой все стали писать что цена на сайте не является офертой и т.п.)
    Ответ написан
    1 комментарий
  • Зачем нужны методы отправки данных отличные от GET, POST?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    если в html формах, js ajax их нельзя отправить
    Кроме хтмл и жс существует еще очень много окружений, способных отправить такие заголовки (самый простой пример - пхп или консольный курл). Чаще всего их (заголовки) используют для семантического разделения API "по намерению", то есть "удалить", "положить", "взять", "только заголовки" и т.д, в частности это применимо в рестфул апи.
    Ответ написан
    Комментировать
  • Какова правда в работе и обучении будущего ИБшника?

    CityCat4
    @CityCat4 Куратор тега Информационная безопасность
    Жил да был черный кот за углом...
    80% работы и обучения - рутина, бесконечная и муторная работа с бумажками, зарплата колеблется около 20к в районах,

    Не бывает "средней температуры по больнице". ИБ - это огромная область, в которой десятки направлений, которые делятся еще на десятки поднаправлений.
    Все очень зависит от того, где работаешь - в одного в конторе в сотню-другую рыл, в небольшом отделе в конторе человек на 500 или в Сбербанке, например.
    Чем меньше контора - тем ширше круг обязанностей, чем больше - тем уже. В небольшой конторе ты можешь быть не очень связан регламентами, тем более, что половину из них тебе же и писать. В Сбере у тебя и 100% времени может уйти на регламенты.
    Со стороны в ИБ можно попасть только в контору типа Сбера - где ты долго будешь расти внутри подразделения. В небольшой конторе рыл на сотню-две - ИБ-шник (если он вообще есть) как правило один, максимум два и занимается он всем и имеет доступ всюду и ждут от него решения всего, в том числе весьма неприятных вопросов (например просмотреть сто тысяч (это не оборот речи - их реально было сто тысяч!) фотографий и удалить компроментирующие определенного человека).
    Работу админа он должен знать лучще админа - потому что ему их контролировать приходится.
    Работу юриста - в определенной области законодательства - не хуже юриста
    Работу психолога - не хуже психолога средней руки (ИБ это далеко не всегда про компы. ИБ зачастую про людей)

    Здесь нет никакой романтики. Здесь нет никаких эмоций - только суровая безжалостная правда, которая крошит иллюзии безжалостно, когда ты видишь на оперативном мониторе СМП, что девочка с ресепшн, о кторой ты втайне мечтаешь, переписывается с мальчиком из продаванов, и при этом матерится как сапожник и собирается отдаться за покатушки на тачке...
    Это скучная, рутинная работа, где много микротиков (или цисок, или даже фортигейта), много конфигов прокси и правил iptables, много логов и их анализа, много СМП/DLP и никакой хакерской романтики
    Ответ написан
    2 комментария
  • Что использовать для реализации EDA в микросервисной архитектуре?

    @yarkin
    RabbitMQ это про очереди, если у вас есть очередь задач, то не думаю, что захотите чтобы все воркеры выполняли одно и тоже действие. Если нужно, чтобы каждый сервис получал копию сообщения, они должны иметь независимые очереди, которые могут быть подписаны на один эксчендж.
    Если у вас может быть по N инстансов одного сервиса, то все N подписываются на одну и ту же очередь (иначе см. выше что будет), но каждый сервис должен иметь свою очередь.
    Почитайте базовые мануалы по RabbitMQ - https://www.rabbitmq.com/getstarted.html - там много полезного найдёте (на хабре есть переводы на русский, если надо)

    Например, для простоты возмём что эксчендж всего один - events. Есть два сервиса - S1 и S2. У каждого из них по 3 инстанса. Сервисы хотят получать все сообщения которые публикуются в events.
    Получаем (допусти ещё ничего нет):
    - создаём эксчендж events (лучше до запуска всего) с типом fanout
    - первый инстанс S1 при запуске создаёт очередь - events-s1; создаёт биндинг этой очереди на эксчендж events; подписывается на эту очередь
    - второй и третий инстансы S1 при запуске видят, что очередь есть и просто подписываться на неё
    - всё тоже самое повторяется для S2

    При росте сервисов, одного эксченджа может не очень хватить, тогда одна очередь может имеет более одного биндинга к нужным ей эксченджам. Или тип эксченджа можно поменять на topic и управлять тем кто получит сообщения уже через ключи биндингов и заголовки сообщений, а не имена эксченджей.
    Ответ написан
    Комментировать
  • Что в себя включают «Системные данные», занимающие слишком много места?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Бежит лиса по лесу, вдруг из кустов:
    - Ку-ка-ре-ку....
    Лиса - в кусты. Там возня, шорох, визги. Выходит волк, застегивая ширинку и поправляя штаны:
    - Вот что значит знание иностранных языков!


    Я в маках ни бельмеса, но вижу что вопрос уже сутки висит в топе без ответа.
    При том что достаточно перевести свой вопрос на иностранный, как в интернете сразу находится куча информации.
    Вот например буквально такой же вопрос на реддите, What is System Data on Mac and why is it at 335.22GB?!
    То есть в первую очередь надо перезагрузить свой мак.

    Так же гуголь находит много других рекомендаций по очистке "системных данных" AKA "System data". И чтобы ими воспользоваться, надо всего лишь немного знать английский.
    Ответ написан
    5 комментариев
  • Как найти работу, если есть скиллы, но нет опыта?

    php666
    @php666
    PHP-макака
    При всем этом у меня дикий паралич перфекциониста и синдром самозванца, мне кажется, что моих знаний ещё недостаточно, сайты с вакансиями пестрят требованиями того, чего я не знаю в совершенстве, а невозможность контролировать свободное время на текущей основной работе не даёт возможности спланировать какие-либо стажировки или фриланс-проекты.
    Ты — ничтожество, жалкий грешник, урод, всё в тебе, что есть — это зло и грех, тебе приготовлены вечные муки, страшный суд, ад и погибель (c)
    Ответ написан
    1 комментарий
  • Как работают алгоритмы выбора лидера в распределенных системах?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Можно же просто сделать так - какой-нибудь узел заметил, что текущий лидер отвалился, и он сразу же отправляет всем остальным узлам напрямую, либо на какую-то шину, что теперь он - лидер.

    Если текущий лидер отваливается, почему вы думаете, что все остальные узлы узнают об этом по очереди?
    Узнают одновременно. И одновременно пошлют всем узлам, что они новые лидеры, и получится бардак.
    Именно поэтому и проводится выбор - либо генерируется случайное число каждым узлом, и выбирается среди всех тот, у кого число самое большое. Либо есть заранее заданные приоритеты выбора лидеров, основанные или на конфигах, или на мощностях, как уж создателю программы показалось нужным.
    Опять же, в алгоритм можно добавить настройки, чтобы администратор мог указать какие машины не должны участвовать в выборе.
    Ответ написан
    2 комментария
  • Есть ли польза от codewars?

    @Cobweeb
    Конечно есть и большая! Codewars это практика для собесов, благодаря систематическим занятиям ты легко ну или гораздо легче будешь справляться с задачками с собесов(тот же пресловутый live coding), потому-что они будут или похожи или приемы которые ты использовал в codewars применишь на собесе. А в реальности ты мало уделяешь именно тем приемам которые нужны в таких задачках, реальную задачу вообще можно слепить из либ одних и забыть как сортировку делать)) Да и если ты в реальной задаче сам сортировку написал то по хорошему тебе надо руки оторвать))
    Ответ написан
    1 комментарий
  • Как организовать быстрый поиск по 78 млн строк?

    Зависит от того какой поиск и какие данные.
    Опять же - если данных уж очень много, то вряд ли получится всё в ОЗУ загрузить
    Если по точному соответствию, и все они уникальные - используй хэш таблицы.
    Если они сортируемые - отсортируй и используй бинарный поиск.
    Если нужен полнотекстовый/нечёткий поиск - проще взять стороннюю СУБД.
    Ответ написан
    7 комментариев
  • Кто проходил курсы от Otus? Отзывы? Мнения?

    @eiv_tm
    Я пытался учиться на Kotlin в Otus, отзывы судя по-всему пишут их сотрудники, такого дна я еще не видел. Преподаватели опаздывают, не готовятся к лекции, несут такую ахинею волосы дыбом. Но есть и плюс, я прослушал три лекции, пришло понимание, что я не готов за это платить и мне вернули сумму полностью, так как вовремя пришло осознание, если бы позже, то высчитали бы. За это им спасибо, а если в интернете почитать отзывы, то это у них не на одном курсе такое, системность прослеживается.
    Ответ написан
    Комментировать
  • Где можно почитать про правильную организацию сервера и распределения нагрузки (EN/RUS)?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    200-800 юзеров это вообще ни о чём.
    подойдёт любая архитектура, даже говнокод
    Ответ написан
    2 комментария
  • Где можно почитать про правильную организацию сервера и распределения нагрузки (EN/RUS)?

    miraage
    @miraage
    Старый прогер
    Да читать особо не надо
    0) с вашей нагрузкой можно это всё дело на ноутбуке дома запустить, и он справится
    1) обвешиваете приложение метриками (grafana итп)
    2) время от времени смотрите, где боттлнеки
    3) рефакторите этот код или выносите его в отдельный сервис
    Ответ написан
    Комментировать
  • Обрабатывает ли postgres запросы одновременно?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    От транзакционности и наличия кластера. Транзакции выполняются всегда последовательно, а любые другие запросы - параллельно. У распределённого кластера есть свои особенности
    Ответ написан
    9 комментариев
  • Лучше ли использовать NOT NULL везде?

    @deliro
    Лучше поступить так, как того требует бизнес-логика. Если цены может не быть — очевидно она должна быть NULL. Потому что 0 и NULL — совершенно разные значения: "бесплатно" и "цены нет", из чего следует, что в первом случае товар продаётся за бесплатно, а во втором может не продаваться.
    Ответ написан
    Комментировать