• Заняты ли потоки при использовании async/await?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    https://msdn.microsoft.com/ru-ru/library/hh156528.aspx
    Выражение await не блокирует поток, в котором оно выполняется. Вместо этого оно указывает компилятору объявить оставшуюся часть асинхронного метода как продолжение ожидаемой задачи. Управление затем возвращается методу, вызвавшему асинхронный метод. Когда задача завершается, она вызывает свое продолжение и возобновляет выполнение асинхронного метода с того места, где она была прервана.

    Метод Task.Run ставит в очередь заданную задачу для запуска в пуле потоков.

    Т.е. в первом случае, у вас просто будет добавлена задача в очередь на выполнение и продолжено выполнение программы (без ожидания, программа может завершить работу раньше, чем созданная задача). А во втором, текущий поток будет ожидать завершения выполнения асинхронной операции. Основной поток при использовании await заморожен не будет.

    // без ожидания
    Console.WriteLine(DateTime.Now);
    
    Task.Run(() => { Thread.Sleep(5000); });
    
    // этот код будет выполнен сразу
    Console.WriteLine(DateTime.Now);
    
    // ожидание с await
    Console.WriteLine(DateTime.Now);
    
    await Task.Run(() => { Thread.Sleep(5000); });
    
    // этот код будет выполнен, только после завершения выполнения задачи
    // текущий (вызывающий) поток не будет приостановлен
    // (например, в Windows Form это будет хорошо видно)
    Console.WriteLine(DateTime.Now);

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

    Console.WriteLine(DateTime.Now);
    
    var t = Task.Run(() => { Thread.Sleep(5000); });
    t.Wait(); // ожидание выполнения задачи
    
    // этот код будет выполнен, только после завершения выполнения задачи
    // текущий (вызывающий) поток будет блокирован
    // (например, в Windows Form это будет хорошо видно)
    Console.WriteLine(DateTime.Now);

    74ad1b048cee439faab48113a61a7ec7.gif
    Ответ написан
    6 комментариев
  • Datapicker криво отображает дату?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Используйте русскую локализацию:

    <script src="i18n/datepicker-ru.js"></script>
    $('#datepicker').datepicker($.datepicker.regional[ 'ru' ]);

    Скачать нужные ресурсы можно отсюда:
    https://github.com/jquery/jquery-ui/tree/master/ui/i18n

    Если вам нужен календарь на английском (или другом) языке, то задать первый день недели можно следующим образом:

    $('#datepicker').datepicker({ firstDay: 1 });
    // или
    $('#datepicker').datepicker('option', 'firstDay', 1);

    Посмотреть рабочий пример

    0 - воскресенье (Su - Sunday)
    1 - понедельник (Mo - Monday)
    и т.д.
    Ответ написан
    Комментировать
  • Как сделать повторение всей программы по запросу (C#)?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Если ответ пользователя будет отличаться от yes, то работа цикла завершится.

    Проверку ответа лучше делать без учета регистра, возможно проблема в этом:

    string answer;
    string yes = "yes"; 
    // из yes лучше сделать константу, чтобы в этом был смысл :)
    // const string yes = "yes"; 
    // либо массив - это позволит проверять разные варианты ответов
    string[] yesVariants = { "yes", "y", "true", "да", "еще бы", "только об этом и мечтаю" };
    // или можно использовать регулярные выражения
    
    do
    {
    
      // любой код здесь
    
      Console.WriteLine("Желаете повторить тест?(Yes/No) ");
      answer = Console.ReadLine();
    
    } while (answer.Equals(yes, StringComparison.OrdinalIgnoreCase));
    // проверка по массиву ответов
    // } while (yesVariants.Contains(answer, StringComparer.OrdinalIgnoreCase));

    56258ea1eb5a4826a05a07bf0beeddd8.gif
    Ответ написан
    Комментировать
  • Есть ли статистика устройств Windows Phone в маркете windows?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Нет там пользователей и скоро совсем не будет :-)

    https://developer.microsoft.com/ru-ru/store/window...
    Ответ написан
    Комментировать
  • Как создавать свои атрибуты без проблем с валидацией?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    data-любоеИмя
    Ответ написан
    Комментировать
  • Как в webpack сделать так, чтобы стили подгружались из нужной папки?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Вы можете добавить синонимы (alias):

    module.exports = {
      resolve: {
        alias: {
           // имя синонима: путь
           'style': path.join(__dirname, 'style.override.css'),
           'любоеУдобноеИмяСинонима': path.join(__dirname, 'путь к модулю'),
           'любоеУдобноеИмяСинонима2': 'илиТакЕслиВкорне',
        }
      }
    }

    И использовать синонимы в коде:

    import 'style';
    import 'любоеУдобноеИмяСинонима';
    require('любоеУдобноеИмяСинонима2');

    В webpack.config.js можно добавить любой функционал для получения путей к синонимам, да и в целом можно все что угодно сделать:

    var suffix = '.override';
    
    module.exports = {
      resolve: {
        alias: {
           'style': path.join(__dirname, 'style' + suffix + '.css'),
        }
      }
    }

    Что касается передачи пользовательских переменных через командную строку, то можно попробовать их указывать через SET (если под Windows). Будет что-то типа этого:

    SET ANY_NAME="VALUE" && webpack -d --color

    Найти переменные можно в process.env. Чтобы сделать вывод переменных в консоль, добавьте в файл webpack.config.js следующую строчку кода:

    console.log('process.env', process.env);
    console.log('ANY_NAME', process.env.ANY_NAME);
    Ответ написан
    3 комментария
  • C#. Как вызвать балуна из трея?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Разместить на форме компонент NotifyIcon, если используется проект Windows Forms.

    Для вывода уведомления, использовать метод NotifyIcon.ShowBalloonTip:

    // необходимо обязательно указать иконку
    // иначе уведомление не будет отображаться
    // можно использовать иконку формы
    notifyIcon1.Icon = this.Icon;
    
    // показываем уведомление
    notifyIcon1.ShowBalloonTip(
      10000, 
      "Новый ответ", 
      "Поступил новый ответ на ваш вопрос на Toster.ru",
      ToolTipIcon.Info
    );
    
    // или с текстом по умолчанию (см. BalloonTipTitle, BalloonTipText)
    // notifyIcon1.ShowBalloonTip(10000);

    Окно программы может находиться в любом состоянии.

    В проектах отличных от Windows Forms можно подключить сборку System.Windows.Forms, но лучше разобраться, может быть есть более правильно решение. Например, для консольных приложений такое решение вполне годится.
    Ответ написан
    3 комментария
  • Как узнать чьи NS сервера?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Домен принадлежит частному лицу.

    Регистратор REGTIME-RU, связаться с владельцем DNS-сервера можно тут.

    IP-адреса принадлежат JSC "Informtehtrans".

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

    Попробуйте написать в Яндекс и Google, возможно они отреагируют и исключат краденные сайты из поиска.
    Ответ написан
    4 комментария
  • Зачем Visual Studio 2015 community просит авторизацию?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Таковы условия использования.

    После авторизации можно будет продолжить использование. Достаточно будет указать email. Это бесплатно.

    Регистрация позволит выполнять синхронизацию между устройствами.

    Через Visual Studio Team Services можно участвовать в разработке совместных проектов. В том числе есть возможность работать с кодом в браузере на сайте www.visualstudio.com. Все готовое, так сказать, из коробки.
    Ответ написан
    Комментировать
  • Что такое библиотека кода?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    "Библиотека кода" - в программировании такого термина я не встречал :-)

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

    Если имеется ввиду библиотека классов (или просто библиотека - англ. library), то это набор классов/модулей/компонентов для выполнения конкретных задач.

    В случае с CSS и HTML, которые упомянуты в тегах этого вопроса, библиотекой можно назвать набор готовых решений, типа Bootstrap (хотя это framework, который состоит из библиотек), Bourbon.

    Основное преимущество библиотек - это переносимость, возможность использовать в разных проектах, отсутствие необходимости вникать в принципы работы.

    При возникновении ошибок в коде библиотеки или добавлении улучшений, новых функций/возможностей, достаточно будет выпустить (или получить, смотря с какой стороны смотреть) новую версию. Это проще, чем держать однотипный код, одинаковые решения в разных проектах и потом из-за досадной опечатки сидеть и перелопачивать все :-) Использование библиотек экономит время.
    Ответ написан
    Комментировать
  • В каком случае сперва отправляется OPTION затем PUT запрос?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Запросы OPTIONS отправляются для проверки возможности выполнения запроса, проверки возможностей сервера и должны отправляться всегда, когда нужно выполнить проверку.

    Сначала идет запрос OPTIONS и если ответ сервера положительный, то следом выполняется нужный запрос.
    Ответ написан
    Комментировать
  • Как получить ответ с fancybox?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Я обычно делаю собственные alert и confirm, которые выводят сообщения в модальных окнах.

    Для обработки закрытия можно использовать либо функции обратного вызова, либо Promise.

    Использование с Promise выглядит так:

    Confirm("Да или Нет?").then((result) => {
      if (result) {
        console.log("Пользователь согласен на всё.");
      }
      else
      {
        console.log("Пользователь что-то подозревает.");
      }
    });

    Внутри все равно без обработчиков не обойтись, но если функция вызова окна будет одна, то это не критично:

    function Confirm(message) {
      let p = new Promise((resolve, reject) => {
        // тут код создания окна
        // $.fancybox({ 
        //   modal: true,
        //   content: '<div>' + message + '</div>'
        // });
        // в обработчики кнопок нужно добавить вызов resolve
        // true - если пользователь нажал Ok
        // resolve(true);
        // false - если пользователь нажал Отмена
        // resolve(false);
      });
    
      return p;
    }

    При желании, можно сделать свой аналог Promise, хотя смысла нет, готовый вполне пригоден для решения подобной задачи.

    Вот более полный рабочий пример:

    function Confirm(message) {
      return new Promise(function(resolve, reject) {
        var buttons = $('<div class="buttons" />');
        var btnOk = $('<button class="btn btn-default">Ok</button>');
        var btnCancel = $('<button class="btn btn-default">Отмена</button>');
        var content = $('<div />');
    
        btnOk.click(function() { 
          resolve(true);
          $.fancybox.close(); 
        });
        
        btnCancel.click(function() { 
          resolve(false); 
          $.fancybox.close();
        });
    
        content.append('<div class="message" />');
        content.append('<hr />');
        content.append(buttons);
        
        $('.message', content).html(message);
        
        buttons.append(btnOk);
        buttons.append(' ');
        buttons.append(btnCancel);
        
        $.fancybox({ 
           modal: true,
           content: content
        });
      });
    }
    
    Confirm('Вы согласны с этим решением?').then(function(result) {
      if (result) {
        $('body').append("<h1>Отлично!</h1>");
      }
      else  {
        $('body').append("<h1>Очень жаль...</h1>");
      }
    });
    Ответ написан
    Комментировать
  • Как найти динамический DOM элемент?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    var element = document.createElement('div');
    element.id = 'test'; // уникальный идентификатор элемента
    element.innerHTML = 'создан новый элемент';
    
    document.body.appendChild(element);
    
    // получаем по идентификатору добавленный элемент
    document.getElementById('test').innerHTML = 'изменено содержимое созданного элемента';

    https://jsfiddle.net/alekseynemiro/x76s8zsy/1/

    В просмотре кода страницы динамически созданных элементов не будет, т.к. содержимое страницы - это то, что было получено от сервера, а JavaScript работает на стороне клиента.

    ---

    Дополню ответ в соответствии с обновлением текста вопроса.

    Получить path можно:

    1. По ссылке, в переменной path:

    console.log('path', path);

    2. Найти с помощью document.querySelector, например по имени класса:

    var path = document.createElement('path');
    path.className = 'anyClass';
    
    console.log('path', document.querySelector('.anyClass'));

    3. По идентификатору, как показано в самом первом примере:

    var path = document.createElement('path');
    path.id= 'path';
    
    console.log('path', document.getElementById('path'));

    4. По имени тега, но придется еще что-то проверять, поскольку на выходе будут все элементы path:

    console.log('path', document.getElementsByTagName('path'));


    PS: У меня ваш код работает без ошибок:
    https://jsfiddle.net/alekseynemiro/voyj5rt1/
    Используется Snap.svg v0.4.1

    649c48abe93b40a8b7efe17f39e7a0b5.gifOpera 39, Chrome 54, IE 11

    ---

    Обновление по результатам обсуждения проблемы в комментариях:

    Проблема в том, что создавать SVG-элементы нужно с указанием пространства имен, с помощью метода document.createElementNS:

    var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
    var path = document.createElementNS('http://www.w3.org/2000/svg', 'path');

    https://jsfiddle.net/alekseynemiro/voyj5rt1/4/
    Ответ написан
  • Как составить условие, если переменная равна -1?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    <?php if($music != -1) { ?>
    Или тут в чем-то подвох? :-)
    Ответ написан
    8 комментариев
  • ASP NET Как хранить данные внутри приложения?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    У приложения есть события запуска и завершения работы.

    Общие данные можно загружать при запуске приложения (Application_Start) или подгружать в статические классы в процессе работы приложения. Либо использовать HttpApplication, хотя смысла в этом особого нет.

    Важную информацию можно сохранить при завершении работы приложения (Application_End) в любое удобное хранилище (базы данных, файлы). Если данные очень важны, то лучше их периодически сохранять в процессе работы приложения (сделать таймер при инициализации приложения), т.к. рабочий процесс может быть завершен некорректно и событие Application_End может не возникнуть. Также следует учитывать вероятность неожиданного завершения работы приложения в момент сохранения важных данных (например, если рабочий процесс будет убит).

    Временные данные можно хранить в кэше.

    Небольшие объемы данных можно хранить в переменных, но лучше постараться держать такие данные в одном месте и не размазывать по всему приложению. Например, использование для этих целей классов контроллеров - не лучшая идея.
    Ответ написан
    Комментировать
  • Как передать DOM через prop?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Не проще ли сделать общего родителя для видео и элементов управления?

    <mediaPlayer>
      <video ref={(v) => this.video = v} />
      <playerControls onStop={...} onPlay={...} onPause={...} />
    </mediaPlayer>

    Тогда элементы управления смогут общаться с проигрывателем через общего родителя.
    Ответ написан
    4 комментария
  • Как быстро отсортировать таблицу?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Узкое место тут в первую очередь jQuery. Нужно уменьшить число запросов к элементам через jQuery. А то получается, что у вас при сортировки для каждой итерации происходит маленький ад :-)

    Возможно, если вы сделаете сортировку, сформируете новый набор данных и затем замените им старые данные, работать будет быстрее.

    Вот небольшой пример: https://jsfiddle.net/alekseynemiro/q3tsw3bt/1/

    var data = [];
    
    // получаем данные из таблицы в массив
    $('tr', 'table>tbody').each(function(index, row) {
      var cells = $('td', row);
      var sum = 0;
      var items = [];
    
      for (var i = 0; i < cells.length; i++)
      {
        if (i == cells.length - 1)
        {
          cells[i].innerHTML = sum / 5;
          items.push(sum / 5);
        }
        else
        {
          sum += parseInt(cells[i].innerHTML, 10);
          items.push(parseInt(cells[i].innerHTML, 10));
        }
      }
    
      data.push(items);
    });
    
    // сортируем массив
    data.sort(function (a, b) {
      return a[5] - b[5];
    });
    
    // создаем новую таблицу на основе массива
    var html = '<table><thead><tr>';
    html += '<th>price</th><th>price</th><th>price</th>';
    html += '<th>price</th><th>price</th><th>avrg</th></tr></thead>';
    html += '<tbody>';
    
    for (var i = 0; i < data.length; i++)
    {
      html += '<tr>';
    
      for (var j = 0; j < data[i].length; j++)
      {
        html += '<td>' + data[i][j] + '</td>';
      }
    
      html += '</tr>';
    }
    
    html += '</tbody></table>';
    
    // выводим таблицу (перезаписываем старую)
    $('#content').html(html);

    Набросал еще вариант со счетчиком и с 50 000 строками, но счетчик показывает неправильное время, видимо на отрисовку данных в браузере уходит больше времени.
    Ответ написан
    Комментировать
  • Как использовать встроенные стили css?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Встроенные стили имеет смысл использовать, когда нужно создать одну страничку, чтобы не было дополнительных файлов.

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

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

    Приложения JavaScript могут содержать упакованные стили и встраивают их в HTML при инициализации. Это вполне нормальная практика. Однако если стилей очень много, их обычно выносят в отдельный файл.
    Ответ написан
    Комментировать
  • Доступ к бд из бэкапа bac и конвертация в mysql?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Нужно использовать самую свежую версию SQL Server, т.к. файлы резервных копий созданные в новых версиях SQL Server нельзя восстановить в старых.

    Что касается конвертирования, то в MySQL Workbench есть функции импорта данных из SQL Server.

    4b21b3f449e2434eb1b52de451b9b655.png

    В SQL Server Management Studio также есть возможность экспорта в MySql через .NET Framework Data Provider for MySql.

    e1a5e9974b86425b9cd22fab8a84911d.png

    Но для этого нужно прежде восстановить базу SQL Server.
    Ответ написан
    1 комментарий
  • Почему не срабатывает маршрут?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Проект точно был компилирован? Ошибок в процессе не возникало?

    Судя по маршруту, страница должна открываться по адресу:

    http://localhost:11733/meropriyatia

    Первый параметр - это имя сопоставляемого маршрута. Затем идет шаблон и значения по умолчанию.

    https://msdn.microsoft.com/ru-ru/library/dd504958(...

    Для адреса:

    http://localhost:11733/meropriyatiavnikolaeve

    маршрут должен быть таким:

    routes.MapRoute(
      "meropriyatiavnikolaeve", // имя
      "meropriyatiavnikolaeve", // шаблон
      new { controller = "Home", action = "meropriyatiavnikolaeve" }
    );
    Ответ написан
    5 комментариев