• Требования к самописной CRM?

    Jeer
    @Jeer
    уверенный пользователь
    Аж жуть берет от таких заданий ) Покупка готового инструмента обычно дешевле, чем разработка с нуля. Особенно если разработка осуществляется одним человеком. Особенно если опыта мало. Особенно, если на поддержке будет тот же человек, что и на разработке ) безумие :) проект полетит в помойку, но у вас будет строчка в резюме по созданию проекта, можете обкатывать любые технологии за счет глупого работодателя.

    По делу без брюзжания:
    Писать под винду моветон - лицензии дорогие
    Вин формс зачем? - делайте веб апи с фронтом на вью/реакте/ангуляре. Нужна кроссплатформенность, чтобы хоть с телефона можно было зайти и нажать нужную кнопку в системе.
    Апи нужно, потому что будет много интеграций с другими системами, загрузка/выгрузка в 1с, не дай бог будете телефонию подключать
    Внутренняя сеть решается с помощью впн сервера.
    Помимо функциональных требований существуют еще технические, должен быть мониторинг, вы должны всегда знать сколько ресурсов потребляет ваш сервер, сколько данных занимает на дисках, логи и трейсы - гуглится по слову Observability, обычно не закладывается в смету, но к этим вопросам приходят рано или поздно
    Что еще, ну, по функционалу тут проще, открываете презентации в популярных CRMках, смотрите, что они могут, выписываете списком и идете к заказчику, чтобы он указал галочками, что будете делать, что не будете
    потом прикидываете по трудозатратам и озвучиваете сроки из которых можно понять примерную стоимость проекта. Часто одно маленькое предложение, типа того же "выгрузить данные в 1с" грозит несколькими десяткми часов работы, потому что другой отдел, с ними нужно договориться и сделать интеграцию. Или "должен быть отчет такой-то", а там как начнешь разбираться, еще 5 раз посовещаться сначала надо ))
    Ответ написан
    Комментировать
  • Кто знает решение?

    lina666
    @lina666
    Изучаю веб ЯП.
    Хм, если я правильно все понял то задача простейшая.
    const Person = function (startName) {
      let name = ''
    
      const getName = function () {
        return name
      }
    
      const setName = function (val) {
        name = val
      }
    
      return {
        setName, getName
      }
    }; // modify this function
    
    const personModule = Person()
    personModule.setName('Kotaro')
    console.log(personModule.getName())
    Ответ написан
    1 комментарий
  • Есть ли какие-то сервисы или форумы, куда можно выложить свой код, чтобы его могли оценить и оптимизировать другие люди?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Если код выполняет свою задачу и устраивает бизнес - значит достаточно хороший.

    Если хотите расти как разработчик - читайте стандарты, переписывайте код чтобы он им соответствовал (name convention или для питона вообще PEP 8)

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

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

    Поэтому собственно ваш вопрос нужно переиначить не на то, как сделать код лучше, а с какой целью интересуетесь.
    Раз вас таким напрягают, можете из начальства регулярно выбивать деньги на курсы по питону, там что-то подучить, познакомиться, позадавать вопросы заодно. И книжки, тоже можно читать advanced литературу, и обращать внимание на теорию, там часто говорят о правильном подходе, и вам, как человеку с живой практикой, это уже будет понятнее.
    Ответ написан
    Комментировать
  • Обход заглушек провайдера 2022, актуальные способы?

    @AlexVWill
    На микротике настроить VPN клиент, и пускать только отдельные страницы через VPN. https://interface31.ru/tech_it/2019/11/nastroyka-v...
    Ответ написан
    2 комментария
  • Какой оптимальный вариант вставки значений в форму?

    @ildar-meyker
    Ну если это какой-то обычный проект не на React или т.п., то ваше решение вполне себе годное и типичное. Если полей много, ну в целом это можно сделать так:

    const form1 = document.getElementById('form-1');
    const form2 = document.getElementById('form-2');
    
    const formData = new FormData(form1);
    for (const [key, value] of formData) {
      form2.querySelector(`[name="${key}"]`).value = value;
    }


    + правки для чекбоксов там и прочего, что требуется.
    Ответ написан
    1 комментарий
  • Как програмно поменять название игры в окне?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Не встречал у юнити такой прям готовой функции, но всегда можно прибегнуть к WinAPI SetWindowText
    Ответ написан
    1 комментарий
  • Каково реальное актуальное ограничение по скорости интернета со стороны провайдера/серверов?

    @d-stream
    Готовые решения - не подаю, но...
    Категории кабеля не имеют понятности актуальности. Каждая из них имеет свой диапазон применимости. В диапазонах до 1Гбит/с - категория 5e - сверхдостаточна и оптимальна. Аналогия: фапать на кабель AWG-0000 для зарядки сотового телефона)

    Домашние провайдеры не предоставляют услуг гарантированного канала - поэтому и тарифы "10Мбит" и "1гигабит" и "100500гигабит" звучат так только в рекламном булшите... в договорах звучит как "..скоростью [от нуля] до xx Гбит/с [до порта провайдера]" и в переводе на человекопонятный язык это выглядит как:
    - даже скорость 0 (ноль) гигабит/с в таких тарифах юридически допустима и нормальна
    - это скорость от квартиры до ближайшего коммутатора, не более...

    Так что в принципе всё это скорее развод для лошков)

    Классика жанра:
    абоненты домового провайдера подключены гигабитом до ближайшего коммутатора, который... подключен оптикой к оптическому коммутатору ядра... тоже гигабитом... А ядро имеет пару-тройку 10 гигабитных аплинков до IX

    Дальше можно прикинуть что будет когда 48 жителей одного подъезда вдруг зарядят например закачку торрентов))

    Ну и да: более-менее нормальные сайты и ресурсы обязательно шейпят отдаваемый в одни руки поток... как правило не очень быстрый
    Ответ написан
    Комментировать
  • Что делать, если отключил службу, отвечающую за пинкод в виндоусе, а пинкод есть?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Что делать, если отключил службу, отвечающую за пинкод в виндоусе, а пинкод есть?

    Поскольку мы не знаем, что именно ты там поотключал и как это в дальнейшем может сказаться на работе системы, рекомендации могут быть только самые общие.
    Установи систему заново.
    Когда вновь установишь windows, положи рядом с клавиатурой металлическую линейку и всякий раз, как чьи-либо руки полезут отключать сервисы и копаться в настройках windows, бей по тем рукам этой линейкой. Таким образом ты существенно снизишь вероятность возникновения подобной проблемы.
    Ответ написан
    Комментировать
  • Как работает grpc?

    @deliro
    А что тут понимать-то? Представь, что у тебя есть два сервиса, которые общаются по JSON-RPC over HTTP. Приходит сервис1 к сервису2 и говорит, ну-ка бахни мне метод getSomethingOfSomething с аргументами вот такими. И всё это в виде JSON внутри HTTP body. Сервис2 идёт, смотрит у себя в реестре метод getSomethingOfSomething, вызывает его с аргументами и отдаёт результат. Легко? Легко. Теперь тоже самое, только вместо HTTP там HTTP/2, а вместо JSON — protobuf. То есть, два сервиса договорились, что в первых четырёх байтиках будет лежать, например, int32, в следующих восьми будет лежать float64 ну а там дальше ещё что-то будет лежать.
    Ответ написан
    3 комментария
  • Разбиение локалки на подсети?

    @res2001
    Developer, ex-admin
    Петр, В целом вы правы, это работает так как вы описали. Добавлю, что маска не обязана содержать только 0 и 255 - в ней могут быть любые числа, где в двоичном представлении старшие биты заполнены единицами, а младшие нулями (0 и 255 - частные случаи - все нули и все единицы), чем меньше единиц в маске - тем шире диапазон, каждая дополнительная единица в маске уменьшает доступный диапазон адресов в 2 раза.

    Но Если у вас в реальности 10 (20, 30, <200) компов, то нет смысла увеличивать маску. Проще при той же маске, отдать какой-то диапазон адресов роутерам, другой диапазон серверам, третий - пользовательским компам. Все диапазоны - чисто формальные у вас в голове для простоты эксплуатации - сеть все равно остается одной с единым широковещательным доменом.

    Если у вас есть и другие цели, например вы хотите как-то ограничивать доступ или оптимизировать трафик к серверам, сетевым принтерам, группам пользователей друг к другу и т.п., то имеет смысл эти группы устройств помещать в отдельный VLAN и внутри VLAN использовать свою IP подсеть, доступ к серверам ограничивать фаерволом на границе подсети. В этом случае нужно будет еще подумать над тем, какое устройство будет маршрутизировать и фильтровать трафик между подсетями.
    Ответ написан
    Комментировать
  • Разбиение локалки на подсети?

    Mi11er
    @Mi11er
    A human...
    Для вашего вопроса , существует vlan .
    Ответ написан
    5 комментариев
  • Разбиение локалки на подсети?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Теоретически так. Практически, для таких целей обычно используют другие адреса: 172.16.0.0 с маской 255.240.0.0 или 10.0.0.0 с маской 255.0.0.0
    Ответ написан
    Комментировать
  • Как в микротик настроить две локальных сети?

    @Drno
    Выделить для этого отдельный интерфейс
    Настроить на него адрес
    Настроить на нём dhcp при необходимость
    Разрешить NAT для этой подсети в фаерволе
    Ответ написан
    Комментировать
  • Как отдать объект без некоторых полей?

    @Voland69
    Строить разные модели (регистрация, логон, инфо о юзере) и маппить их на сущность из базы.
    Если разово, можно конечно [JsonIgnore] навесить, просто не попадет в сериализацю.
    Ответ написан
    2 комментария
  • Как найти самое часто встречаемое число в массиве?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const mostFrequentNum = Array
      .from(arr.reduce((acc, n) => acc.set(n, -~acc.get(n)), new Map))
      .reduce((max, n) => max[1] > n[1] ? max : n, [ , 0 ])[0];

    или

    const mostFrequentNum = Object
      .entries(arr.reduce((acc, n) => (acc[n] = (acc[n] ?? 0) + 1, acc), {}))
      .reduce((acc, n) => (acc[n[1]] = +n[0], acc), [])
      .pop();
    Ответ написан
    2 комментария
  • RAID 1 из дисков разной емкости?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно собрать два зеркала 1:1 и 0.5 : 0.5 и потом склеить их через какую-то умную файловую систему типа zfs.
    Ответ написан
    Комментировать
  • RAID 1 из дисков разной емкости?

    @rPman
    Программный рейд mdadm или фишки файловых систем btrfs и zfs, позволяют создавать raid массивы на основе разделов а не дисков (вообще любых блочных устройств, в т.ч. каскадно), производитель дисков или дискового контроллера будет не важен

    В твоем случае ты можешь разбить 1т.б. диски на по 2х 500гб раздела, и объединить по отдельности первые с 500гб дисками и вторые друг с другом
    Ответ написан
    Комментировать
  • RAID 1 из дисков разной емкости?

    @Drno
    Сделайте 2 raid 1 и дальше объедините в lvm
    Ответ написан
    7 комментариев
  • Как мне укоротить код, но так, чтобы функционал не менялся?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    отрефакторите, вынесите куски кода в функции, текстовые строки в константы, да и вообще используйте форматированные строки

    let message = `Ничья
    Вы победили ${userScore} раз
    Компьютер ${computerScore} раз`
    Ответ написан
    Комментировать
  • Можно ли без высшего образования работать в Геймдеве?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    На наличие вышки никто не смотрит. Но она не лишняя. Как минимум глубоко в рендер-пайплайне сидят матрицы - и это уже ВУЗовская математика (если программа не поменялась). +вышка это хорошая школа жизни (ща в меня полетят тапки - но это личное мнение), которая поможет выстроить в т.ч. коммуникативные навыки.

    Можно быть отличным специалистом без вышки, можно быть говном с тремя дипломами.
    Ответ написан
    2 комментария