• Какие есть варианты организации сборки, деплоя и мониторинга приложений в kubernetes?

    @unseriously
    Для кубера есть удобная админка Rancher, которая позволяет тюнить мышкой, а не консолькой. Там же есть возможность добавить мониторинг и логирование. Ставить ее лучше не в кластер, а снаружи, потому что если кластер навернется, то и админка тоже.
    Ответ написан
    1 комментарий
  • Какие есть варианты организации сборки, деплоя и мониторинга приложений в kubernetes?

    Вот вы наварили кашу в вопросе из CI, CD, мониторинга и логирования!
    Если хочется в одном месте - у Gitlab есть интеграция с Kubernetes. К сожалению, не уверен покроет ли на 100% ваши пожелания, но вроде бы базовый мониторинг и отображение логов он мог https://docs.gitlab.com/ee/user/clusters/agent/ind...

    Если разделять, то уже придется отталкиваться от желаемого решения по деплою. Опишу на своем примере - мне подход GitOps лучше всего подходит, и я выбрал выкатываться с использованием helm и ArgoCD - есть минмиальный мониторинг и логирование в одном месте.
    Централизованный мониторинг сервисов организован при поддержке Prometheus / Prometheus Operator.
    Логирование в ELK со сбором логов через filebeat.
    В случае необходимости визулаьного восприятия состояния кластера, использую Lens.
    Ответ написан
    4 комментария
  • Есть ли данные о эффективности Agail?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Если вы хотите двойное слепое рандомизированное плацебоконтролируемое исследование на тему эффективности применения Agile, то таких нет.
    А вообще, неплохо бы привести пример "серьезных научных исследований" других методов разработки продукта, например водопада или канбана или еще чего, чтобы было понятно что вы хотите.

    Вокруг этого подхода действительно много шума и бесполезной/неверной информации, много примеров неудачного применения, но это не значит что это фуфло какое-то.

    Сам я несколько раз пробовал работать по этой методологии и так и не понял какие задачи она решает.


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

    Более того в компании в которой работал от Agail отказались и неожиданно получили прирост в производительности.

    И это нормально - может там не было тех проблем на которые нацелен Agile. Можно попробовать молотком забивать шурупы, потом отказаться в пользу ответрки и получить прирост производительности, но это не значит что фраза "молоток - хороший инструмент" это маркетинговый буллшит и надо искать научные исследования на тему молотка. Надо сначала понять как применять молоток правильно и есть ли у вас вообще гвозди которые надо забить. А то может у вас все на болтах там.
    Ответ написан
    Комментировать
  • Как настроить защиту от DDoS для NGINX или Apache?

    При данных параметрах обнаружения атаки думаю вам подойдет fail2ban.
    Ответ написан
    3 комментария
  • Как организовать портативную (переносную, мобильную) среду для разработки?

    @HomeDimoN
    В свое время пользовался MojoPac
    https://en.wikipedia.org/wiki/MojoPac
    Недостатки:
    • Под Windows 7
    • Уже не производиться...(но можно найти на развалах...)

    Использовал не как переносной диск, а как изолированное рабочее место, с возможностью переноса

    Можно попробовать Windows to GO...
    Или посмотреть в сторону https://portableapps.com/ , если чего нет то VMWare ThinApp (или аналог) в помощь...
    Ответ написан
    Комментировать
  • Как организовать портативную (переносную, мобильную) среду для разработки?

    @Byte255
    Пишу на PHP за еду
    IDE на виртуальных машинах запускать мне кажется неудобным - тормозят.

    У меня был вариант с двумя флешками. Одна - простая liveUSB с xubuntu, - вторая - с кучей deb пакетов (все среды разработки и т. п. ) и скриптом, который их ставит. Ещё там были xampp и копии конфигов из папки /home/$USER

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

    Минус решения - браузеры (важные для меня как для php-шника и javascript-щика) слишком часто обновляются, приходилось постоянно обновлять пакеты на usb.

    В итоге забил на это дело, проще переустановиться и всё установить один раз.
    Ответ написан
    2 комментария
  • Как организовать портативную (переносную, мобильную) среду для разработки?

    @saizero
    чтоб избежать запар при смене машины можно на внешнем диске (ssd, чтоб пошустрее) развернуться полностью, когда нужно подключил, бутанулся с него и работаешь, там же браузеры, ide и все что душа пожелает
    Ответ написан
    2 комментария
  • Как работать в режиме энергосбережения?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Есть ряд методик, помогающих справляться с нагрузкой на больших дистанциях. Одна из популярных - работа "помидорами". Суть её в том, что в течение относительно небольшого промежутка времени (25 минут) идет работа только над одной задачей, без отвлечения на соц. сети и прочие раздражители. За периодом работы следует пятиминутный отдых, за который как раз можно успеть проверить нотификации в телефоне и ответить на сообщения.
    Эта и другие полезные техники есть в книге Дорофеева "Джедайские техники". Автор там подбирает значительный арсенал, как экономить силы и время.
    Ещё на эту тему есть книга "Getting Things Done" от Дэвида Аллена, тоже даёт понимание, как "менеджерить" и справляться с собственными задачами, а не закапываться в них. 
    Ответ написан
    Комментировать
  • Как начать использовать технологию WebSocket?

    bagau
    @bagau
    Фронтент разработчик
    На прошлой работе я писал онлайн-консультанта с использованием веб-сокетов. На сервере php с вебсокетом, на клиенте javascript. Комментировал код, можете посмотреть здесь на Github.
    Файл websocket.php - логика самого вебсокета, с комментариями. Я ничего не понимал в вебсокетах, поэтому комментировал каждую строку, чтобы понять.
    файл start_socket.php - работа с вебсокетом.
    Написано без использования фреймворков.
    Онлайн консультант в принципе рабочий, но я его не смог доделать, ушел с работы
    Ответ написан
    Комментировать
  • Как работать с websocket в php без библиотек?

    @xfg
    Прочитать соответствующий RFC https://tools.ietf.org/html/rfc6455 чтобы понять, как происходит рукопожатие и какие байты в переданном сообщении за что отвечают. После этого будет понятно как написать реализацию. Я досконально уже не помню, но фактически от клиента приходит обычный http запрос с определенными заголовками, сервер разбирает этот запрос и если всё ок, то сохраняет открытое соединение в массив, если нет, то отправляет соответствующий ответ и закрывает соединение. Дальше по открытому соединению начинает сыпаться поток байтов от клиента их нужно разбирать, чтобы понять длину сообщения, сами данные переданные в фрейме, закончился фрейм или еще нет и тому подобное. Обратно также кодировать данные в поток байтов и отправлять по открытому соединению. Каждый байт в переданном фрейме несет определенный смысл. Обо всем этом подробно написано в RFC, но на английском. Вообще это хорошо примерно понимать как работает, но глупо писать такую низкоуровневую реализацию, когда есть готовые. Такие вещи развивают и поддерживают годами. Вы же не пишите HTTP серверы, а берете готовые вроде nginx и тому подобное.

    В каком месте можно полученные данные подготовить к записи в бд.

    Как сделать, что бы на стороне клиента, один websocket отвечал за сообщения, другой за статьи. (Или за эти два действия отвечает один websocket, тогда как мне на сервере это различать).

    Вебсокет это низкоуровневая штука, для передачи потока байтов от клиента на сервер, в отличии например от HTTP, где есть заголовки и тело сообщения. Поверх вебсокета нужно делать еще один протокол или самописный или выбрать один из готовых. Это проще говоря, то как выглядят ваши фреймы (сообщения), которые вы отправляете с клиента на сервер и назад. Например клиент может отправлять такой фрейм:
    ["id", "controller/action", {param1: value1, param2: value2}]

    в ответ получать
    ["id", "OK"]
    если запрос был обработан успешно или
    ["id", "ERR", {error: "action not found"}]
    если произошла ошибка. По переданному id в массиве, можно понимать, к какому запросу относится ответ.
    Для уведомлений (событий) сервер может отправлять клиентам что-то такое
    ["user_added", {user: {...}}]
    и т.д. Этот протокол необходимо придумать самому или выбрать из готовых (популярных пока нет) и написать его реализацию (клиентскую и серверную часть) или опять же взять уже готовую.

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

    Но это уже всё должно быть, просто возьми real-time фреймворк. Там за тебя написали и websocket сервер и протокол поверх него и экшены уже есть. Всё низкоуровневое уже готово. Бери и пиши приложение. В nodejs самый популярный это например https://github.com/socketio/socket.io, а в php я не знаю, но уверен, что тоже есть что-то популярное.

    Своё написать не получится, без опыта и без попыток сделать приложение на чем-то готовом. Нужно как минимум прочитать RFC и посмотреть реализации других разработчиков. Для этого нужно быть кем-то больше, чем "программистом сайтов".
    Ответ написан
    1 комментарий
  • Где хранить быстрые задачи?

    @Newbie2
    Microsoft To-Do. Прекрасно интегрируется с Outlook и OneNote/
    Ответ написан
    Комментировать
  • Где хранить быстрые задачи?

    просить присылать их в мессенджер
    Ответ написан
    Комментировать
  • Где хранить быстрые задачи?

    @mitekgrishkin
    Todoist. Есть клиент под все платформы с синхронизацией, можно на ходу с телефона кратко написать, потом в компе просматривать, что собрался сделать
    Ответ написан
    Комментировать
  • Где хранить быстрые задачи?

    @dshumov
    Олдскул - Фигурнов форева
    Советую:
    Тайм-менеджмент для системных администраторов
    Там этот момент освещен.
    Ответ написан
    Комментировать
  • Как в Yii2 организовать Dependency Injection с вызовом метода?

    mashletov
    @mashletov
    Math.random()
    Почему нельзя сделать setLang в конструкторе у LangRepository? По теме — никак. Не думаю, что в Yii, есть какое-то событие при внедрении.
    Ответ написан
    4 комментария
  • Как в yii2 advanced сделать общие ресурсы?

    AlexMaxTM
    @AlexMaxTM
    Во-первых, в advanced шаблоне frontend и backend это по сути независимые домены, и в каждой папке web есть свои css и js - и это логично. В админке и фронтенде обычно используются разные стили и разные js-скрипты.
    Во-вторых, jquery в Yii2 и так подключается автоматически в админке и фронте.
    В-третьих, подключение происходит в файлах AppAsset, если влом писать в двух местах подключение, можете сделать дополинтельный файл и инклюдить его в обоих AppAsset
    Ответ написан
    5 комментариев
  • Как выйти из рабочего коматоза?

    fedorez
    @fedorez
    Хатуль мадан
    Сходите к доктору, проверьтесь. Вдруг витаминов с минералами каких-то не хватает, или гормональное что-то.
    Социализация, друзья(не собутыльники), хобби.
    Спорт.
    Бег. Универсальный пылесос для мозга.
    Как вариант.
    Ответ написан
    2 комментария
  • Каковы основные принципы регистрации и авторизации через социальные сети OAuth2?

    hbuser
    @hbuser Автор вопроса
    Отвечу сам себе.
    Здесь есть полезная конкретная информация о технической реализации.

    А если вкратце, то...

    Для авторизации, регистрации используется все та же таблица 'users'. Вместе с обычной регистрацией и авторизацией, когда при регистрации (в самом простом виде) в таблицу 'users' добавляются email, password и login пользователя, а при авторизации проверяется соответствие введенных login'а и password'а существующим в базе данных, аналогичным образом используется и регистрация/авторизация через социальные сети. Только в данном случае источником данных о пользователе для его регистрации является не непосредственный пользователь, который вводит данные в форму, а соц. сеть. Регистрация в данном случае достаточно прозрачная, т.е. не видна пользователю. Схема примерно следующая (без особенностей работы Oauth-протокола):


    1) Пользователь выбирает вход через соц. сеть.
    2) Происходит обращение к странице авторизации в этой соц. сети, если человек еще не авторизовывался там. После ввода данных, а если он ранее авторизовывался, происходит запрос на разрешение использования его данных.
    3) Если человек отказывается, то на этом конец. Если дает согласие, то выполняется перенаправление на указанную в настройках Oauth страницу сайта.
    4) У каждого пользователя в соц. сетях есть свой уникальный идентификатор, который можно запрашивать. Для своей таблицы 'users' нужно добавить пару дополнительных полей (например, вот такие): auth_via (enum('native, 'vk', 'mailru', '...')) - для обозначения типа регистрации пользователя, и social_id - здесь будет храниться уникальный идентификатор в соц. сети. Если нужно хранить какие-то специфические данные этого пользователя из соц. сетей, то можно создать доп. поля для этих данных.
    5) После того, как пользователь дал разрешение на использование его данных, необходимо запросить нужные данные от соц. сети, в т.ч. и идентификатор пользователя в соц. сети. Вот здесь и начинается невидимый процесс регистрации. Нужно проверить есть ли в БД пользователь с таким social_id, если нет, то вставляем social_id, данные пользователя из соц. сети, по необходимости, в БД. Все, пользователь зарегистрирован.
    Если же данные о пользователе есть, то необходимо запросить актуальные данные из соц. сети, сравнить их с теми, что в базе и если они изменились, то обновить их и в своей базе данных, если нет, то просто переходим к следующему шагу.
    6) Создается сессия с данными пользователя.

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

    ca4a4b263fd1424085988c9deaeb6d5b.png

    Для пользователя, зарегистрированного из соц. сети пароля и логина, естественно, нет. Они нужны для авторизации. А т.к. пользователь авторизуется с помощью своих логина и пароля в соц. сети, то и указывать здесь нечего. И еще, можно при авторизации, к запросу проверки логина и пароля, добавить условие

    'AND WHERE `auth_via`="native"'

    , чтобы исключить пользователей, зарегистрированных из соц. сетей.

    Как видно, для каждого пользователя в таблице создается внутренний (внутрисайтовый, если так можно выразиться) первичный, автоинкрементный ключ. Соответственно, нет разницы для логики сайта между пользователем, зарегистрированным через соц. сеть и через сайт. Если говорить об интернет-магазине, то, для привязки заказов к пользователю, можно использовать единый, внутренний идентификатор ID.
    Ответ написан
    3 комментария
  • Где найти материалы по архитектуре развивающегося проекта?

    Ranwise
    @Ranwise
    может эта книжка поможет Создание микросервисов, Сэм Ньюмен - 2016
    Ответ написан
    Комментировать
  • Где найти материалы по архитектуре развивающегося проекта?

    Sivkoff
    @Sivkoff
    Web Developer
    Крайне рекомендую читать вместе со ссылками: https://habrahabr.ru/post/276593/
    Ответ написан
    Комментировать