• Random как сгенерировать случайные числа но с определенной вероятностью выпадения?

    @dmshar
    Эта элементарная задача называется "генерирование дискретных случайных величин с заданным законом распределения". Решается классическим образом.
    Сначала разбиваем наш диапазон от 1 до 100 на следующие интервалы:
    1-35,36-60,61-85,86-95,96-100.
    Затем генерируем число, равномерно распределенное в диапазоне от 1 до 100. Номер интервала, в который это число попадает дает ваши генерируемые цифры - от 1 до 5, причем распределены они в точности по вашей таблице распределения.
    Ответ написан
    11 комментариев
  • Random как сгенерировать случайные числа но с определенной вероятностью выпадения?

    Stalker_RED
    @Stalker_RED
    dmshar все правильно вам написал, разбивайте число из диапазон 1..100 на интервалы

    function foo() {
      let random = Math.floor(Math.random() * 100) + 1; // 1..100
      switch (true) {
        case random < 36: return 1 // 35%
        case random < 61: return 2 // 25%
        case random < 86: return 3 // 25%
        case random < 96: return 4 // 10%
        default: return 5
      }
    }


    Тест: запустим 10 млн раз и посмотрим распределение
    Ответ написан
    Комментировать
  • Почему Yii:$app это плохо?

    @developer007
    Глобальные переменные в большинстве случаев нарушают инкапсуляцию. К ним открыт неконтролируемый доступ отовсюду.

    В большом проекте при обилии глобальных переменных возникает путаница в именах. Глобальную переменную же видно отовсюду, надо, чтобы отовсюду было понятно, зачем она.

    Глобальные переменные в большинстве случаев нарушают принцип инверсии зависимостей (или делают возможным его нарушение).

    Глобальные переменные ухудшают масштабируемость проекта.

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

    Глобальные переменные приводят к трудноуловимым ошибкам. Примеры: нежелательное изменение её значения в другом месте/другим потоком, ошибочное использование глобальной переменной для промежуточных вычислений из-за совпадения имен, возвращение функцией неправильного значения при тех же параметрах (оказывается, она зависима от глобальной переменной, а ее кто-то поменял).

    Глобальные переменные создают большие сложности при использовании модульного тестирования.
    Глобальные переменные увеличивают число прямых и косвенных связей в системе, делая её поведение труднопредсказуемым, а её саму - сложной для понимания и развития.
    Ответ написан
    Комментировать
  • Как обрезать текст в GO?

    Тримы работают вполне нормально https://play.golang.org/p/31OXind1eyt
    str := "UserName: Vasya Pupkin"
    result := strings.TrimPrefix(str, "UserName: ")
    fmt.Println(result)
    Ответ написан
    2 комментария
  • Как вывести Titles и Links в одной строке?

    bitniks
    @bitniks
    Go/PHP/Symfony developer
    for index, item := range cyber.Links {
    	fmt.Printf("%s: %v\n", cyber.Titles[index], item)
    }
    Ответ написан
    1 комментарий
  • В чем превосходство Typescript?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Как бы это странно не звучало, но одно из главных преимуществ TypeScript - это ускорение разработки в несколько раз. Да, когда еще ничего нет - разработка незначительно замедлится, так как помимо логики нужно описать еще и типы. Но это только в начале. И это не только возможность писать большую часть кода с помощью автодополнения. Поддержка существующего кода занимает в десятки раз больше времени, чем его начальное написание. Стоит ли вложить несколько лишних часов на старте, чтоб сэкономить в последствии месяцы? Как по мне стоит.

    Еще одним огромным плюсом является возможность проектировать на типах. Познав дзен TypeScript'а я перестал пользоваться UML, так как типы дают мне ту же наглядность, но при этом еще и сокращают время, так как типы - это уже код. Ну и источник правды остается один. Бизнес требования выраженные в типах не дают отклонится от них при написании логики, исключая возможность неправильной трактовки задачи. Перенеся задачу в типы, я могу обсудить ее с коллегами и исправить неточности еще до написания кода, что опять же сильно экономит время.

    Ну и отвчечу на некоторые Ваши сомнения:
    TSLint в VSCode прям жутко тугой
    TSLint официально deprecated, вместо него стоит использовать плагин к eslint, заодно можете мой конфиг попробовать.

    Типы? Есть JSDOC
    JSDoc в плане типов не умеет и 10% того, что умеет TypeScript. Кроме того, никто в здравом уме не пишет JSDoc на приватную логику, а значит проверки типов там не будет. JSDoc не гарантирует корректность рефакторинга, а вот благодаря TypeScript я, опять таки, точно не забуду обновить JSDoc.

    многие библиотеки nodejs не имеют типов
    может лет 5 назад так и было, но сейчас встретить библиотеку без типов - скорее исключение. Если библиотека популярная, но не предоставляет типов, скорее всего их уже написал кто-то другой, достаточно просто установить одноименный модуль из npm скоупа types и все будет работать само.

    Поддержка браузерами скомпилированного кода? Да какбы почти весь JS имеет поддержку 95%+, тот же Babel уже забыл когда использовал.
    Вообще это не основная задача компилятора TypeScript, а опциональная возможность. И babel + preset-env с ней справляются гораздо лучше. И никто не мешает использовать их вместе. А еще думаю вопрос времени, когда кто-то напишет оптимизатор кода использующий информацию о типах из TS.

    Примерно в каждой второй есть инстансы, на которые смотришь - и чешешь репу - а как называется тип этой переменной в @types/?
    import {someObject} from 'some-library';
    
    type TypeFromValue = typeof someObject;
    const valueCopy: TypeFromValue = {
        ...someObject,
        type: 'overrides',
        with: 'type check',
    };
    и кстати, вот пример того что JSDoc типы не умеют.

    //@ts-check
    и почти везде останется бесполезный any.

    P.S. удачи такие типы на JSDoc описывать
    P.P.S. Еще прелести современного TypeScript невозможные у...
    Ответ написан
    8 комментариев
  • Лучший способ избежать race condition, в данном случае?

    @raiboon
    Два варианта.
    1. Мьютекс. С чего вы взяли, что воркеры будут выполняться по очереди? Сначала идет какая-то долгая работа конкурентно, а потом мьютекс на короткий промежуток времени закрывает слайс, пока идет в него добавление результата.
    2. Канал. Смысл в том, что результаты собираются в одной горутине. Тогда не будет конкурентной записи в слайс. Это более go way. Это можно делать в main или запустить еще одну.
    Ответ написан
    7 комментариев
  • В каких приложениях Go существенно эффективнее чем Node.js и PHP?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Бенчмарки - это хорошо, но очень важно понимать что именно там меряли и почему результаты именно такие.

    Несколько лет назад я тоже делал бенчмарки Python, PHP, Node, Go.
    Для меня были важны две вещи:
    1 - скорость ответа сервера/кол-во запросов в секунду
    2 - объём сервиса в памяти, т.к. от этого зависит стоимость ресурсов

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

    Но вся эта разница сошла на нет, как только добавился всего один простой SQL запрос в базу, в таблицу с 10 строками. И на этом фоне разница по скорости ответа была меньше 10%.

    Иными словами если ваш сервис работает с базой - критической разницы по скорости работы между Go/Rust/PHP/Node/Java, особо не будет.

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

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

    Один экземпляр Go занимал в памяти порядка 6мб RAM, при том, что Pytho+Django порядка 60мб.
    Node уже не помню сколько, но что-то близкое к Python'у.

    Вот тут уже, когда серверов у вас будет много - количество серверов с Go у вас будет в 10 раз меньше, соответственно расходы за эти сервера у вас будут в 10 раз меньше :)

    В крупных компаниях, где нужны специалисты по Go - там уже есть высокие нагрузки и переход на Go и поиск специалиста обусловлен необходимостью решить в первую очередь проблему с нагрузками, оптимизировать расходы на оборудование.

    Где-то читал статью, что у людей было API на порядка 40 серверов на Node, после переписывания на Go - серверов осталось два, из которых второй запасной :)
    Ответ написан
    13 комментариев
  • Зачем во Vue запросы выносят в services?

    Kozack
    @Kozack Куратор тега Vue.js
    Thinking about a11y
    1. Для упрощения кода. Скажем, чтобы не писать каждый раз всю конструкцию аля
      axios.get(ENDPOINT + '/api/' + API_METHOD, {
        params: {
          id
        }
      })
      .catch
      ...

      Делается обёртка, условная функция getUser(id). В неё выносится вся логика по работе с запросом, определение маршрутов АПИ, обработка ошибки и так далее. Наружу торчит только одна функция и параметр.
    2. При работе с TS это проще типизировать. Намного легче описать типы принимаемых параметров и возвращаемый тип для нескольких функций, чем описывать универсальную конструкцию для доступа к любым методам апи.
    3. Ну и наконец: сервис можно вызывать прямо в компонентах. Вызывать методы АПи не обязательно внутри Vuex. Доже чаще это должно выполняться внутри отдельных компонентов, каждый из которых работает с одним-двумя апи, а не со всем набором.
    Ответ написан
    4 комментария
  • Стоит ли сегодня новичку изучать C/C++?

    gbg
    @gbg
    Любые ответы на любые вопросы
    И так, случайные чуваки из интернета, перед вами человек, о знаниях, умениях, навыках и способностях вы ничего не знаете.

    И он спрашивает вас - а стоит ли мне заниматься X?

    НУ ОТКУДА МЫ ЗНАЕМ, стоит ли вам заниматься X? Вот я программирую уже больше 20 лет, 16 из них я программирую на C++, 14 - получаю за это зарплату в виде пяти, а потом и шестизначной суммы

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

    Вам этот ответ как-то поможет? Особенно если у вас нет желания углубленно ковыряться в тонкостях архитектуры вычислительных систем и радоваться лишним выжатым из процессора миллисекундам?

    Если у вас есть желание работать типа в айти 5/2 с 9 до 18, получать стабильные 90к рэ в месяц - есть более "легкие" пути.

    Чем грозит неправильный выбор при высокой зарплате? Размазыванием слез и других жидкостей по хабру в духе "ребята, мне 25 годиков, на мне жена, дите, ипотека, я получаю три штуки баксов в месяц, но я совсем выгорел, у меня депрессия, тревога, импотенция, жена говорит, что я эмоционально холоден к ней, изменяет и грозит разводом...

    КАКОГО ПСИХОТЕРАПЕВТА МНЕ ВЫБРАТЬ, ШТОБ ПОМОХ?"
    Ответ написан
    4 комментария
  • Зачем нужны опережающие и ретроспективные проверки?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Потому что некоторые задачи имеют дело с повторениями.

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

    Однако что если вам нужно найти все цифры между двумя E?
    Вот такие:
    E123ExxxE456E789E

    По вашей логике нужно выражение: /E(\d+)E/
    И да, оно действительно найдёт 123 и 456 (см. ссылку), но на 789 оно сломается, потому что там E входит как бы сразу в две подстроки. В этом случае и нужен позитивный просмотр вперёд. Мы как бы подсматриваем, что там впереди, но не захватываем, поэтому поиск следующей подстроки начинается раньше.
    Для такой задачи решением будет: /E(\d+)(?=E)/
    Ответ написан
    Комментировать
  • На каком языке сейчас чаще всего программируют микроконтроллеры?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    почему для этой цели (как я читал на других источниках) язык Си выбирают чаще чем свой более развитый аналог - Java

    Пример контроллера - ATTiny13:
    - 1 КБ внутрисистемно программируемой Flash памяти программы
    - 64 байта внутрисистемно программируемой EEPROM памяти данных,
    - 64 байта встроенной SRAM памяти

    Удачи с размещением виртуальной машины Java + кода самой программы с учетом имеющихся ресурсов...
    Ответ написан
    5 комментариев
  • Как остановить golang? И как не запускать сразу в daemon в ubuntu?

    Ну и запускайте в терминале. Открывайте терминал и запускайте там сервер. По-умолчанию он как демон не запускается.
    Ответ написан
    2 комментария
  • Как архитектурно организовать поисковый микросервис на golang?

    tumbler
    @tumbler
    бекенд-разработчик на python
    Redis как кэш актуален для "одноядерных" языков вроде node/python/php. Там большие проблемы с многопоточным доступом к памяти, поэтому вместо памяти используют key-value (memcached еще вспомнить можно). А если у вас голанг - так зачем редис? Воспользуйтесь кэшом в памяти, всё еще на порядок быстрее работать станет за счет отсутствия сетевых взаимодействий на кэш-хитах.
    Ответ написан
    2 комментария
  • Оптимальная версия macOS?

    Самая свежая из тех, что могут на него встать.

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

    @Kostik_1993
    Web Developer
    Ну если по фактам раскидать дальше только хуже. Так что или сдался или поборол себя и пошел дальше. Это еще верхушки. А дальше нужно придерживаться DRY, KISS, SOLID, YAGNI. Учить и применять паттерны. Одумайся пока не поздно...
    Ответ написан
    3 комментария
  • Обучение программированию, что делать если застрял?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Писать что-то свое, такой большой и интересный(для тебя) пет прожект. И если что то не идет - временно отвлечься и писать его любимого. Вроде и отвлекся, и вроде как по теме работаешь. Ну и заодно писать учишься, ошибки свои решаешь, а это гораздо более мотивированно чем абстрактные задачи решать. Даблкилл.
    Ответ написан
    1 комментарий
  • Почему не работает Debug в GoLand?

    @PapaStifflera
    Родился, вырос...
    Потому, что ваше приложение падает при запуске. И даже ошибку выводит о том, что порт 8080 занят.
    Ответ написан
    1 комментарий