• Почему нельзя/можно писать бизнес-логику в sql?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Когда в руках молоток, все вокруг становится похожим на гвоздь... Если вы хорошо разбираетесь в языках запросов, это не говорит о том что это распространенный навык.
    Самый простой аргумент - посмотрите на рынок, много ли движков, построенных на бд/sql?
    Много ли специалистов по бд вообще на рынке труда?
    Кто из них разрабатывал логику на стороне бд?
    Кроме того, слои яп-бд можно разнести на разные инстансы, что сильно распределит нагрузку, а бд сама по себе умеет в пожрать ресурсы...

    Можно долго перечислять плюсы и минусы. Смысл в том что если вы будете разрабатывать это сами или для себя и вы уверены в собственной способности построить всю логику на одной технологии- флаг в руки, это будет оригинальным решением, вполне возможно даже что найдутся ценители.
    Если же проект для заказчика, и в разработке будут участвовать 2+ людей, то тут то вы хапнете проблем большой ложкой. Найти спецов которые прям пишут логику на скуеле, чтобы они стоили приемлемых денег, завтра не ушли в другой проект так как тут надо делать кучу непрофильных дел: как-то делить задачи, вести версионирование, не пересекаться с другими задачами функционалом... проще пойти в нормальную контору, где от дбшника требуют только структуру, пару триггеров и он там один отвечает за бд, так как больше не нужно и ни с кем из коллег не надо 10 раз утверждать изменения в структуре/процедурах/етц. Короче это не специфично и мало кто захочет все это изучать с новой стороны. Про поддержку такого чуда я вообще молчу.

    Это еще не учитывая того что в проекте все равно понадобится пара программистов на каком-то ЯП, для формирования отображения и какой-то прослойки между пользователем и бд, которые должны будут разобраться с этим зоопарком наоборот.
    Ответ написан
    4 комментария
  • Какие минусы использования c# при разработки на андроид?

    @AlexVWill
    насколько код будет хуже по сравнению с котлином\явой,

    насколько код будет хуже зависит исключительно от автора кода
    Ответ написан
    7 комментариев
  • Для работы в сфере ИБ обязательно профильное образование?

    CityCat4
    @CityCat4 Куратор тега Информационная безопасность
    Внимание! Изменился адрес почты!
    Зависит от вакансии. Может так оказаться, что придется заниматься почти тем же - микротики, прокси, линуха, а может - что чем-то что кардинально новое.

    Здесь проблема в другом. ИБ, если оно в конторе вообще есть (и это не Сбер, не ВТБ, не Почта России и не профильная контора по ИБ-оутсорсу) - обычно представлено в количестве одного-двух человек. У них может не быть каких-то технических компетенций, но у них есть главное - доверие. ИБ - это про лояльность к текущей конторе. Потому что как правило для ИБ не существует ограничений по правам - она им не подлежит, она сама их ставит, следовательно доверие к ней должно быть запредельным.

    Поэтому с улицы обычно туда не берут, а переводят тех, кто работал в смежных подразделениях, если вдруг возникает такая необходимость.
    Ответ написан
    Комментировать
  • Как сменить директорию профиля Google Chrome?

    drygdryg
    @drygdryg
    Python-разработчик
    Можно использовать аргумент командной строки --user-data-dir.
    См. https://chromium.googlesource.com/chromium/src/+/H...
    Ответ написан
    1 комментарий
  • Может кто-нибудь дать реальную задачу на которой можно применить ООП?

    php666
    @php666
    PHP-макака
    вот же людям не лень писать портянки каждому новичку на одни и теже вопросы..

    гради буч объектно-ориентированный анализ и проектирование
    Ответ написан
    Комментировать
  • Может кто-нибудь дать реальную задачу на которой можно применить ООП?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    Сколько фигни понаписали, а человек просто просил реальный пример для применения ООП.

    ООП помогает строить приложения так, как человеку удобнее мыслить. Наш мир окружают объекты. И в программировании мы описываем эти объекты. Например: человек - объект. Человека мы можем описать не целиком, если нам нужен человек только лишь как клиент. А для этого нам важен его идентификатор, имя и прочие данные.
    После чего мы используем списки таких объектов для манипуляции данных. Список клиентов - список объектов.

    Объекты могут совершать действия, или над объектами могут совершатся действия. Т.е. клиент сам может создавать заявку или этим может заниматься менеджер.

    Что то типа Client.CreateOrder (клиент создает заказ) или Orders.CreateOrder(Client) (менеджер заявок создает новую для такого-то клиента).
    Всё достаточно просто.

    Тебе достаточно придумать любую задачу и просто решить её с помощью объектов.
    Например, музыкальный плеер. Пусть трек будет представлять объект, содержащий путь к файлу, название, продолжительность и так далее. И список треков. Дальше сам решай кто чем будет управлять. Либо ты работаешь над списком объектов, либо каждый объект может сам делать что нужно. Но для музыкального плеера удобнее, когда треки лишь содержат данные (DTO). Т.е. имеем список треков и манипулируем объектами (добавляем, редактируем, удаляем и т.д.)

    Это в общих чертах. После чего добавляем наследование. Например, есть базовый класс - трек, но он может быть как ссылка на веб-ресурс, а может быть как файл. Т.е. мы создаем общий абстрактный класс для хранения любых треков в списке (как файловых, так и веб)

    TAudio = class abstract
    private
      FId: string;
    protected
      function GetTime: TTime;
      function GetName: string;
    public
      property Id: string read Fid write FId;  //Пусть тут будет полное имя файла или ссылка на веб
      property Time: TTime read GetTime;  //Время
      property Name: string read GetName;  //И имя
    end;

    После чего мы можем от него наследовать два класса (для файлов и для веб)
    TAudioFile = class(TAudio)
    protected
      function GetTime: TTime; override;
      function GetName: string; override;
    end;
    
    TAudioUrl = class(TAudio)
    protected
      function GetTime: TTime; override;
      function GetName: string; override;
    end;


    И хранить оба типа объектов в одном списке.
    TAudioList = TObjectList<TAudio>;

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

    Используя список мы можем
    var AudioList := TAudioList.Create;
    
    var Audio: TAudio := TAudioFile.Create('C:\Music\Track1.mp3');
    AudioList.Add(Audio);  // Добавлять аудио файлы
    
    Audio := TAudioUrl.Create('webmusic.ru/tracks/track1.mp3');
    AudioList.Add(Audio);  // Добавлять веб аудио 
    
    AudioList.Delete(0); // Удалять элементы
    
    // менять местами, сортировать, редактировать и т.д.


    Теперь у нас общий плейлист для тех и других видов аудио и мы можем скармливать их плееру для воспроизведения.

    Player.Play(AudioList[0].Id);

    А дальше мы можем усложнять и усложнять, добавляя новые возможности. Например, завести интерфейс и принимать аудио файлы из плагинов. Или использовать ОРМ для хранения плейлистов в базе данных. Мы можем отличать один вид от другого при переборе списка и обрабатывать уникально для некоторых.
    Ответ написан
    4 комментария
  • Когда стоит начинать изучать ООП в PHP?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Сейчас самое время начать))
    Ответ написан
    Комментировать
  • Можно ли установить компьютер на застекленном балконе?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    сделайте из фанеры ящик, обшейте его урсой. только оставьте отверстия для охлаждения.
    лень считать но грелка в 250 ватт должна держаться до -20
    Ответ написан
    Комментировать
  • Можно ли установить компьютер на застекленном балконе?

    saboteur_kiev
    @saboteur_kiev Куратор тега Железо
    software engineer
    Если не выключать вообше, то будет норм. Если выключать, то может случиться проблема с конденсатом.
    Ответ написан
    Комментировать
  • Приложение масштаба предприятия на Symfony?

    @galliard
    Ну, если решитесь на такую архитектуру - тщательно скрывайте от других разработчиков свое место жительства))

    Но лучше все-таки использовать стандартную архитектуру симфони, и уже в контроллерах/сервисах/дто можно раскладывать классы в поддиректории.

    А фронтенд, если решите делать его на ангуляр/реакт/етц - лучше вообще в отдельный репозиторий вынести.
    Ответ написан
    4 комментария
  • Как стать бэкэнд разработчиком без высшего образования?

    xez
    @xez
    TL Junior Roo
    Работал я как-то в банке...
    Год работаю, второй, третий.
    Тут, неожиданно, приходит письмо из кадров с вопросом: предоставьте, мол, свой диплом об образовании. А у меня образования - только три класса церковно-приходской школы.
    Ну я в ответ и пишу: пока ещё вуз не окончил.
    Больше никто никогда об образовании меня не спрашивал.
    Ответ написан
    Комментировать
  • Как ускорить загрузку firefox со старым профилем?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    сам перепробовал много чего, но в конечном итоге остановился на загрузке профиля в оперативную память и управление с помощью утилиты profile-sync-daemon
    соответствующая статья есть на archWiki - Firefox/Profile on RAM
    конкретно по утилите Profile-sync-daemon
    Ответ написан
    Комментировать
  • Почему не перезагружается браузер при редактировании кода с расширением PHP на локальном сайте Wordpress?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    С кодом gulp-файла практически всё в порядке.
    Убедитесь что при открытии вкладки в браузере, справа сверху в углу сайта появляется похожая надпись как на скриншоте - это означает что текущая вкладка успешно подключилась к серверу Browsersync, в противном случае что-то мешает подключению (расширения в браузере, CORS политики, запрет загрузки http ресурсов и соединений из под открытой по https странице)
    609755e32e832804684561.png
    Также, можно дополнительно посмотреть "админку" сервера Browsersync со списком подключенных вкладок (браузеров) к серверу: localhost:3001 (раздел: Current Connections - скриншот ниже).
    И нажав на кнопку "Reload all" (скриншот ниже) проверить перезагрузится ли вкладка с сайтом.
    Если перезагрузится, значит проблема не в подключении к серверу Browsersync, значит что-то не так в тасках gulp/путях к файлам за изменениями которых вы наблюдаете из под Gulp.
    Если же не перезагрузится, то точно проблема с подключением к серверу Browsersync из под вкладки с сайтом.
    60975a05b16d0030381815.png
    В целом советую посмотреть в DevTools браузера - консоль и вкладку Network, и изучить подробнее доки: https://www.browsersync.io/docs/options
    Ответ написан
    2 комментария
  • Как изменить язык валидации laravel на русский?

    @Result007
    P|-|P
    Привет!

    Во-первых, в config/app.php измени:
    'locale' => 'ru'


    Во-вторых, в пути resources/lang создай папку ru. И после скинь туда эти файлы: https://github.com/caouecs/Laravel-lang/tree/maste...

    Внутри файлов можешь описывать свои ошибки.
    Ответ написан
    3 комментария
  • Как скопировать dvd с ошибками на hdd в linux?

    @unseriously
    Можно с помощью команды dd:
    sudo dd status=progress bs=1M if=video.avi of=/dev/sdb
    , где
    if=video.avi - путь к файлу
    of=/dev/sdb - путь к hdd
    Ответ написан
    4 комментария
  • Бесплатная альтернатива Антивируса Зайцева (AVZ)?

    @Filipp42
    Попробуйте антивирус на основе clamAV. Это свободный антивирус. Но если вы человек верующий, предупреждаю, логотип у него в виде черта.
    Ответ написан
    1 комментарий