• Как перебрать массив?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    У вас не массив, а объект, перебор можно сделать следующим образом:

    let arr = { a: [1, 2, 3], b: [3, 1, 5, 8], c: [88, 77, 66] };
    
    for (key in arr) {
      if (arr[key].includes(1)) {
        console.log(true);
      } else {
        console.log(false);
      }
    }
    Ответ написан
    2 комментария
  • Можете дать советы фронт-енд разработчику как более опытные люди(завтра первый день на работе)?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Можно прочитать про лучшие практики: тут и тут. Посмотрите, как работает ESLint - очень полезная штука, которая помогает держать код в чистоте, также можете обратить внимание на Prettier. Удачи вам)
    Ответ написан
    Комментировать
  • Можно ли сделать кастомный плеер без JS?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Можете использовать Plyr, простая вещь, без JS спокойно поднимается и кастомизируется, подробнее тут.
    Ответ написан
    6 комментариев
  • В чем ошибка..?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Поправил код, проверил, должно сработать
    import random
    import time
    
    def displayIntro():
      print('''Вы находитесь в землях,заселенных драконами.
      Перед собой вы видите две пещеры. В одной из них - дружелюбный дракон,
      который готов поделиться с вами сокровищами. Во второй -
      жадный и голодный дракон,который мигом вас съест.''')
      print()
    
    def chooseCave():
      cave = ''
      while cave != '1' and cave != '2':
        print('В какую пещеру вы войдете?(Нажмите клавишу 1 или 2)')
        cave = input()
    
      return cave
    
    def checkCave(chosenCave):
      print('Вы приближаетесь к пещере...')
      time.sleep(2)
      print('Её темнота заставляет вас дрожать от страха...')
      time.sleep(2)
      print('большой дракон выпрыгивает перед вами! Он раскрывает свою пасть и...')
      print()
      time.sleep(2)
    
      friendlyCave = random.randint(1, 2)
    
      if chosenCave == str(friendlyCave):
        print('... делится с вами своими сокровищами')
      else:
        print('...моментально съедает ваc!')
    
    
    
    playAgain = 'да'
    while playAgain == 'да' or playAgain == 'д':
      displayIntro()
      caveNumber = chooseCave()
      checkCave(caveNumber)
    
      print('попытаете удачу еще раз?')
      playAgain = input()
    Ответ написан
    Комментировать
  • Какие есть программы запуска других программ и перезагрузки их?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Зависит от операционки
    На Ubuntu есть такое решение. А вообще все сводится к написанию скрипта.
    Вот честно найденный на просторах интернета пример скрипта на bash:
    #! /bin/sh
    # /etc/init.d/blah
    #
    
    # Some things that run always
    touch /var/lock/blah
    
    # Carry out specific functions when asked to by the system
    case "$1" in
      start)
        echo "Starting script blah "
        echo "Could do more here"
        ;;
      stop)
        echo "Stopping script blah"
        echo "Could do more here"
        ;;
      *)
        echo "Usage: /etc/init.d/blah {start|stop}"
        exit 1
        ;;
    esac
    
    exit 0

    В разделе "start" нужно добавить вызов, чтобы запустить вашу программу. Вызовите его, указав полный путь и задав ему параметр "start" или "stop"
    Ответ написан
  • Какая необходима кодировка в python3?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Используйте utf8 и будет вам счастье)

    text = open('file.txt','r').read()
    text = text.decode('utf8')
    text = text.encode('utf8')


    Подробнее тут и тут
    Ответ написан
  • Нормально ли использовать дефис в домене?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Если дефис нужен для улучшения читаемости, то почему бы нет, иначе зачем это все)
    Поисковик уж точно ругаться не будет, самый частый минус, который описывают при указании дефисов - ухудшение читаемости, если дефисов слишком много
    Ответ написан
    Комментировать
  • Как получить значение из resolve в return?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Есть пара вариантов сделать это.
    Вариант первый:
    function asd() {
      const p = new Promise ((resolve, reject) => {
        socket.on('событие', data => {
          resolve(data);
        });
      });
    
      return p;
    }
    
    asd()
      .then(result => console.log(result))


    Вариант второй (самовызывающаяся функция для того, чтобы использовать await):
    function asd() {
      const p = new Promise ((resolve, reject) => {
        socket.on('событие', data => {
          resolve(data);
        });
      });
    
      return p;
    }
    
    (async () => {
      const result = await asd();
    
    
      console.log(result);
    })()
    Ответ написан
    Комментировать
  • Как разделить текст на слова?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Подробнее о regex_token_iterator можно прочитать тут и тут.

    #include <iostream>
    #include <regex>
    #include <string>
     
    using namespace std;
     
    int main() {
    	const auto input = "Some people, when confronted with a problem, think \"I know, I'll use regular expressions.\""s;
    	
      regex rgx("\\W+");
    
      sregex_token_iterator iter(input.begin(),
        input.end(),
        rgx,
        -1);
      
      sregex_token_iterator end;
    
      while (iter != end) {
        std::cout << *iter << endl;
        ++iter;
      }
    }
    Ответ написан
    Комментировать
  • Как лучше всего писать синхронный код в Node (для последовательных запросов к БД)?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Да, сейчас есть синтаксический сахар в виде async/await. Об этом можно прочитать здесь и здесь
    ConstructorName.prototype.process = async () => {
      const connection = mysql.createConnection({
        host: "-",
        user: "-",
        password: "-",
        database: "-"
      });
      connection.connect();
    
      const operation = new Promise((resolve, reject) =>  {
        connection.query("SHOW TABLES", (err, results, fields) => {
          if (err) reject(err);
          results.some(item => (Object.values(item).indexOf('<tablename>') !== - 1)) 
          ? resolve('таблица в порядке')
          : reject(`Таблица с именем ${'name'} не обнаружена`);
        });
      });
    
      try {
        const result = await operation;
    
        const newOperation = new Promise(function (resolve, reject) {
          connection.query(`SHOW COLUMNS FROM  <tablename>`, (err, results, fields) => {
            if (err) reject(err);
            const tableFields = results.map(item => item["Field"]);
            ["<fieldname>", "<fieldname>", "<fieldname>", "<fieldname>"].every(item => tableFields.indexOf(item) !== -1)
            ? resolve('Поля в порядке')
            : reject(`поле с именем ${'<fieldname>'} не обнаружено`);
          })
        });
    
        await newOperation;
      } catch (error) {
        console.log(error);
      } finally {
        connection.end();
      }
    };
    Ответ написан
    1 комментарий
  • Как сделать выборку в MongoDB по времени?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Для начала вы должны вычислить текущее время минус 1 минуту
    const date = new Date();
    date.setMinutes(date.getMinutes() - 1);

    Теперь сделайте выборку по тем значениям, что меньше этого времени:
    TableName.find( { sent_at: { $lte: date } } )
    Ответ написан
    Комментировать
  • Как называется параметр идущий после метода?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Это вытекает из требования языка и компилятора, вы можете написать функцию внутри класса:
    void PrintClassName(const ClassName& cl) {
    cout << cl.Get() << endl;
    }

    Казалось бы, код занимаются только печатью, принимает параметр по константной ссылке, но при запуске кода вылезет ошибка, и это потому что нигде в методе PrintClassName не указано явно, что он не меняет объект. Компилятор не дает вызвать те методы, для которых не указано явно, что объект они не меняют, достаточно переписать код так:
    void PrintClassName(const ClassName& cl) const {
    cout << cl.Get() << endl;
    }

    И все заработает.
    Или же мы можем рассмотреть другой вариант, и подставить в какую-нибудь функцию на это место ключевое слово volatile, которое говорит, что значение может меняться из вне.
    По сути, все, что можно поставить на место MYPARAM является указателем для компилятора, которое побуждает или наоборот не побуждает его к каким-либо действиям.
    Ответ написан
    Комментировать
  • Как подключить несколько БД mongo в node.js?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Вы можете использовать mongoose. По итогу будет что-то такое:
    const mongoose = require('mongoose');
    
    const firstConnection = mongoose.createConnection('опции для подключения')
    const secondfirstConnection = mongoose.createConnection('опции для подключения')

    Больше о множественных подключениях можно прочитать тут
    Ответ написан
    Комментировать
  • Отправка фотографии с сайта на сервер. Как реализовать?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Воспользуйтесь этой библиотекой на стороне сервера, это самый простой и действенный вариант.
    По итогу будет что-то такое:
    const multer = require('multer');
    
    const store = multer.diskStorage({
      destination(req, file, cb) {
        cb(null, './src/public/images'); // ваша папка для файлов на сервере
      },
      filename(req, file, cb) {
        cb(null, Date.now() + '_' + file.originalname);
      },
    });
    
    const upload = multer({ storage: store }).single('file'); // загрузка одного файла
    const uploadMany = multer({ storage: store }).array('files'); // загрузка массива файлов
    
    router.put('/test', upload, (req, res, next) => {
     req.body.file // файл 
    });
    router.put('/test', uploadMany, (req, res, next) => {
     req.body.files // массив файлов
    });


    На клиенте воспользуйтесь form-data:
    const formdata = new FormData();
    formdata.append("file", fileInput.files[0], "/C:/file-path/file.png"); // если файл один 
    
    formdata.append("files", fileInput.files[0], "C:/file-path/file.png"); // если файлов много
    formdata.append("files", fileInput.files[0], "C:/file-path/file.png"); // если файлов много
    
    const requestOptions = {
      method: 'POST',
      body: formdata,
      redirect: 'follow'
    };
    
    fetch("url/test", requestOptions)
      .then(response => response.text())
      .then(result => console.log(result))
      .catch(error => console.log('error', error));
    Ответ написан
    1 комментарий
  • Сортировка в Python?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Используйте функцию sorted с ключем len
    lst = ['banana', 'orange', 'apple']
    
    # создается новый массив
    sorted_lst = sorted(lst, key=len)

    Или такой вариант:
    lst = ['banana', 'orange', 'apple']
    
    # новый массив не создается
    lst.sort(key=len)
    Ответ написан
    Комментировать
  • Как сгруппировать записи в MongoDB?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Самым лучшим вариантом будет использование агрегаций.

    Посмотрите работу команд: $group, $sum, $project, $lookup и $cond.

    Думаю, этого джентельменского набора более чем хватит для решения задачи
    Удачи)
    Ответ написан
    Комментировать