• Хочу заняться мобильной разработкой, что правильней изучить в настоящее время - C# и Xamarin или Swift?

    impwx
    @impwx
    Разработчик
    У обоих вариантов есть свои плюсы и минусы.

    На Swift можно комфортно писать только под экосистему Apple. Xamarin же позволяет сделать кроссплатформенное приложение, но только с элементарным интерфейсом. Шаг в сторону от предложенных вариантов - и приложение начинает обрастать уродливыми проверками с платформозависимым кодом. Кроме того, бывают случаи, когда Apple выпускает обновление iOS, которое ломает совместимость с Xamarin и пока в Microsoft не выпустят патч, ваше приложение работать на новой операционке не будет.

    Так что всё зависит от ваших предпочтений. Если знаете C# - то порог вхождения в Xamarin однозначно ниже. Но более применимой на практике технологией мне все равно кажется Swift.

    Кроме того, для публикации приложений под iOS в обоих случаях потребуется физический Mac (или обходные пути для его получения) и платная лицензия разработчика.
    Ответ написан
    1 комментарий
  • Как лучше реализовать авторизацию в Web API?

    impwx
    @impwx
    Разработчик
    Да, это хорошая статья. Так оно обычно и делается - bearer token и атрибуты Authorize.

    Кроме обычных токенов есть еще дополнительный тип - refresh token. Они используются в том случае, если срок жизни первого токена истекает и нужно его обновить. Использовать их необязательно - зависит от кейса. Но на всякий почитайте:

    https://leastprivilege.com/2013/11/15/adding-refre...
    Ответ написан
    Комментировать
  • Почему не работает конструкция if else?

    impwx
    @impwx
    Разработчик
    Я бы предложил такой вариант:

    1. При клике запомнить элемент, на который кликнули
    2. Сбросить класс `active` у всех элементов меню
    3. Проставить класс `active` для сохраненного элемента
    4. В цикле проставить `active` для его родителей, пока не выйдем за пределы меню
    Ответ написан
    Комментировать
  • Как составить сложный SQL запрос с пересечением двух таблиц?

    impwx
    @impwx
    Разработчик
    1. Делается вложенным запросом - группируем по ID пользователя, считаем количество записей с помощью COUNT.

    2. Подключаем таблицу friends с помощью INNER JOIN два раза - сначала для сообщений от вас другу, потом для сообщений от другу вам. Если хотя бы одной из двух требуемых строк в таблице friends не окажется, в результирующую выборку они не попадут.
    Ответ написан
  • Почему GetUserManager() возвращает null?

    impwx
    @impwx
    Разработчик
    У человека была похожая проблема, и помогла вот эта строчка:

    app.UseCookieAuthentication(new CookieAuthenticationOptions());
    Ответ написан
  • Как применить регулярное выражение?

    impwx
    @impwx
    Разработчик
    Самое близкое - перечислить список возможных доменов первого уровня, например так:

    ([a-zA-Z0-9-]+\.)+(com|net|org|ru|...)

    В последние годы дело осложняется популярностью gTLD и nTLD. Вот например, строка "my.coffee" - это домен или пропущенный пробел? Оказывается, его можно зарегистрировать.

    Для надежности я бы поступал так - если строка начинается с www, http или имеет слэши, скорее всего это ссылка и там можно использовать любой домен. Если просто строка из двух слов, разделенных точками - то смотреть по ограниченному списку известных доменов первого уровня.
    Ответ написан
  • Как создать нуль-терминированную строку на php?

    impwx
    @impwx
    Разработчик
    \x00 - это последовательность, подставляемая PHP во время компиляции файла, а не в рантайме.

    Если вы хотите получить символ по его числовому коду, есть функция:
    php.net/manual/ru/function.chr.php
    Ответ написан
    3 комментария
  • Почему факториал уходит в нуль?

    impwx
    @impwx
    Разработчик
    Вы можете определить это самостоятельно с помощью пошаговой отладки:
    1. Ставите breakpoint на первой строке в функции
    2. Запускаете приложение в режиме отладчика
    3. Выполняете по одной инструкции (step to next instruction)
    4. Смотрите значения всех промежуточных переменных в каждый момент времени

    Так можно найти момент, в который значение становится неверным, и определить причины, которые к этому привели.
    Ответ написан
    Комментировать
  • Как в C# выполнить скрытый запуск консольного приложения?

    impwx
    @impwx
    Разработчик
    В свойствах проекта можно поменять тип сборки на Windows Application.
    Ответ написан
    4 комментария
  • Что за скрипт, как реализовать?

    impwx
    @impwx
    Разработчик
    Судя по всему, это не готовый скрипт, а написанный специально для этого сайта.

    К счастью, исходник не минифицирован и его реализацию можно подсмотреть:
    start.js, строка 416 (backgroundAnimation).
    Ответ написан
    1 комментарий
  • Как правильно написать запрос SQL?

    impwx
    @impwx
    Разработчик
    Получить первый день месяца по произвольной дате в SQL можно так:

    SELECT DATEADD(month, DATEDIFF(month, 0, @mydate), 0) AS StartOfMonth

    Дальше сравнивайте с помощью WHERE date BETWEEN StartOfMonth AND @mydate.
    Ответ написан
  • Как php сказать ajax, что он fail?

    impwx
    @impwx
    Разработчик
    Для того, чтобы установить код ответа, можно использовать функцию http_response_code(). При этом возвращать тело сообщения не обязательно, но это может помочь при отладке.

    Callback для fail вызовется, если с сервера придет ответ с кодом 4XX (ошибка в запросе) или 5XX (ошибка в самом сервере). Посмотрите список стандартных кодов и выберите подходящий для вашей ситуации.
    Ответ написан
    Комментировать
  • Правильно ли составлено регулярное выражение на PHP?

    impwx
    @impwx
    Разработчик
    Не нужно оборачивать одиночные символы в квадратные скобки. Можно писать их просто так. Для символов со специальным значением (плюс и скобки) нужно использовать экранирование обратным слэшем. Чтобы не плодить по два слэша, используйте строку с одинарными кавычками. Тире, если не внутри квадратных скобок, спецсимволом не является и экранировать его не нужно.

    Итого:

    preg_match('/^\+380\([0-9]{2}\)[0-9]{3}-[0-9]{2}-[0-9]{2}$/i', $phone)

    Если в каком-то месте могут быть пробелы, можно добавить туда \s*. Если пробелы могут быть где угодно, проще сначала заменить пробел на пустую строку по всему значению.
    Ответ написан
    Комментировать
  • Как исправить ошибку Ссылка на объект не указывает на экземпляр объекта?

    impwx
    @impwx
    Разработчик
    Можно подключиться к серверу удаленным отладчиком и поставить галочку "Break on exceptions". Для этого приложение должно быть собрано в конфигурации Debug, а у вас должны быть исходники.

    С веб-приложениями и сайтами внутри IIS делается очень просто, с классическим приложением будет посложнее, но тоже возможно.
    Ответ написан
    Комментировать
  • Как решить ошибку Cannot access child value on Newtonsoft.Json.Linq.JValue?

    impwx
    @impwx
    Разработчик
    Если покажете ваш JSON, будет понятнее.

    Судя по JValue, у вас в одном из случаев data становится не объектом со вложенными свойствами, а примитивным типом (например, числом или строкой).

    Возможно, это ошибка формирования данных, которые вы обрабатываете. Если же вы получаете данные извне и такая ситуация допустима, то вместо data["count"] != null поставьте проверку на data is JObject.
    Ответ написан
    Комментировать
  • Как объеденить n+1 столбцов попарно?

    impwx
    @impwx
    Разработчик
    1, Перенести данные из одного столбца в другой можно с помощью инструкции UPDATE, но все столбцы придется описывать руками, либо написать отдельный скрипт на другом языке, который бы генерировал этот код в виде строки:

    UPDATE rasp
    SET
        1pon = CONCAT(1pon, ' ', 1pon_n),
        2pon = CONCAT(2pon, ' ', 2pon_n),
        ...


    2. Чтобы устранить дубликаты, первым делом в таблицу нужно добавить первичный уникальный ключ (назовем его unique_id). Проще всего их будет удалить с помощью программы на императивном языке программирования (типа php, c#, python или любом другом подходящем), которая выгружает записи, анализирует их и удаляет. Решение на чистом SQL возможно, но из-за неизвестного количества дубликатов оно будет либо очень сложным, либо его придется запускать многократно.
    Ответ написан
    1 комментарий
  • Как отсортировать двухмерный массив по сумме элементов столбца?

    impwx
    @impwx
    Разработчик
    На помощь приходит LINQ:

    var random = new Random();
    
    // размеры массива, в качестве примера взяты константы
    var columns = 10;
    var rows = 5;
    
    // создаем данные
    var data = new int[rows][];
    for(var row = 0; row < rows; row++)
    {
        data[row] = new int[columns];
        for(var column = 0; column < columns; column++)
            data[row][column] = random.NextInt(-100, 100);   
    }
    
    // сортируем данные
    var sorted = data.OrderBy(x => x.Sum()).ToArray();
    Ответ написан
    Комментировать
  • Какие ответы лучше отдавать с сервера?

    impwx
    @impwx
    Разработчик
    Всё правильно. Если вдуматься в смысл метода, он должен получать id записи и возвращать либо ее содержимое, либо флаг ее отсутствия.

    Если вы замените int? на int и уберете первую проверку, приложение будет работать точно так же, но обработка ошибок будет проводиться автоматически средствами фреймворка. Он будет искать метод с подходящей сигнатурой, не найдет его и выдаст стандартное сообщение об ошибке.

    Таким образом, нулевое значение id для логики не важно - это сделано, чтобы нагляднее показать, как можно обрабатывать ошибки вручную.
    Ответ написан
    Комментировать
  • Как нынче тестят Console?

    impwx
    @impwx
    Разработчик
    Это как раз та проблема, ради решения которой придумали Dependency Injection. Если вы жестко завязываетесь на статический класс Console, приходится мириться с его ограничениями, в частности - однопоточностью.

    Самое грамотное решение, за которое будет не стыдно - действительно, использовать DI и интерфейс. Придется реализовать два класса на его основе - "боевой" ConsoleWrapper и тестовый ConsoleWrapperMock.

    В качестве быстрого и грязного решения - если программа несложная и вы можете протестировать всё через входные параметры, можно в тесте запускать ее как внешний процесс (вызывать exe-шник) - тогда процессы будут независимы друг от друга и тесты можно будет гонять параллельно.
    Ответ написан
    2 комментария
  • Как получить список методов, свойств, полей, событий, классов, структур, интерфейсов в C#?

    impwx
    @impwx
    Разработчик
    Есть еще Mono.Cecil - альтернативная реализация рефлексии, позволяющая "расковырять" любую сборку, или создать свою. В том числе можно получить IL-код методов. Конечно, исходного кода на С# не получите, но проанализировать все равно можно. На основе Mono.Cecil сделан, например, декомпилятор IlSpy.
    Ответ написан
    Комментировать