• Как живётся программисту без дискретной видеокарты?

    Pinsky
    @Pinsky
    Кофеиноникотиновая смесь в backend-код
    Абсолютно нормально, два монитора, никаких проблем.
    WebDev. Куда хуже живется программисту без SSD.
    Ответ написан
    1 комментарий
  • Где можно взять список всех функций js и php?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Для PHP можете вот такой вариант взять: https://github.com/JetBrains/phpstorm-stubs
    Он постоянно корректируется пользователями и достаточно актуален
    Ответ написан
    1 комментарий
  • Почему https не работает с мобильных устройств?

    @Lindon_cano
    ssllabs.com/ssltest/
    Что скажет про ваш сайт?
    Прогоните, посмотрите на результаты, загляните в Handshake Simulation и что там про мобильные OS, например.
    Если все нормально, то возможно ваш мобильный провайдер перехватывает https и подменяет сертификаты.
    Ответ написан
    8 комментариев
  • Перевызов событий?

    Nipheris
    @Nipheris Куратор тега C#
    Потому что ивент - это не то же самое, что делегат. Ивент ограничивает интефейс делегата только двумя операциями - добавить и удалить обработчик. Это делается для того, чтобы только изнутри объекта можно было сгенерировать событие. Иными словами, чтобы никто не мог, к примеру, "нажать" кнопку вместо самой кнопки (т.е. сгенерировать событие Clicked в обход внутренней логики класса "Кнопка"). В этом принципиальный смысл концепции событий.

    Можно провести аналогию между полем/свойством и делегатом/событием. Как свойство - это в некоторых случаях "интерфейс" для поля, который позволяет контроллировать, как оно изменяется (при этом вы можете использовать генерируемое поле с помощью синтаксиса { get; set; }), так и событие это "интерфейс" для делегата - вы не можете напрямую изменять или вызывать делегат, вы делаете это с помощью события. Можете также почитать про синтаксис add/remove у событий - тогда аналогия со свойством будет еще понятнее.

    Зачем делать InvokeEvent не совсем понятно, видимо это просто какой-то пример. В реальном коде класс MyClass должен сам решить, когда вызывать то или иное событие.
    Ответ написан
    5 комментариев
  • Convert.ToXXXX() vs. XXX.Parse()?

    idShura
    @idShura
    Почитай тут msdn
    Ответ написан
    Комментировать
  • Как получить значения из GET запроса и вывести их в консоль?

    AcidBat
    @AcidBat
    C#
    Есть подобие класса Request, как в ASP.NET? Можно через него выводить.
    Или тупо можно спарсить первую строку этого запроса.
    string n = "GET /index.html?id1=1&id2=2&id3=3&id4=4 HTTP/1.1";
    string q = n.Split(new Char[] { ' ', '?' })[2];
    foreach(string p in q.Split(new Char[] { '&' }))
    {
        System.Console.Write(p.Split(new Char[] { '=' })[1]);
    }
    Ответ написан
    3 комментария
  • Как записать из двох массивов одинаковые значения в третий?

    @Alexander1705
    Посмотрите вниметельней на этот код:
    for (int j=0, i = 0, z=0; i < size,j<size,z<size; i++,j++,z++)
    {
        if (massA[i] == massB[j]) {
            massC[z] = massA[i];
            cout << massC[z] << " ";
        }
    }

    Думаю, вы не понимаете, как работает for. Вы присваиваете трём переменным одинаковое значение и одновременно увеличиваете каждый на единицу. Всё равно, что вы написали бы следующее:
    for (int i = 0; i < size; ++i)
    {
        if (massA[i] == massB[i]) {
            massC[i] = massA[i];
            cout << massC[i] << " ";
        }
    }

    Согласитесь, это не имеет смысла. Чтобы сделать то, что вы задумали, нужно разместить один цикл внутри другого:
    int k = 0;
    for (int j = 0; i < size; ++i)
    {
        for (int j = 0; j < size; ++i)
        {
            if (A[i] == B[j])
            {
                // Здесь можно сделать так:
                C[k] = A[i];
                ++k;
    
                // или одной строчкой
                // C[k++] = A[i]
            }
        }
    }

    Но заметьте, что у такого алгоритма будет один недостаток: если в одном массиве два одинаковых элемента, и в другом два таких же, в новом массиве их будет четыре. В более общем случае, если в одном массиве a одинаковых элементов, а в другом b таких же, в результате вы получите a*b таких элементов, что также может вызвать переполнение вашего массива.

    Вообще странно, что ваш пример скомпилировался. Должно быть, вы используете устаревший компилятор. В C++ функция main должна возвращать int. Использование void приводит к ошибке:
    main.cpp:1:11: error: ‘::main’ must return ‘int’


    Так же обратите внимание, что если используете в C++ заголовочные файлы языка C, их принято называть с префиксом c и без расширения .h
    #include <ctime>
    А вообще, в C++ есть random.

    Также никогда не используйте system("pause"); функция system, приостанавливает вашу программу, и запускает указанную в аргументе. Люди которые не используют Windows, не смогут запустить ваш код, потому что у них нет программы pause.
    Ответ написан
    Комментировать
  • Что такое Model в МVС?

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

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


    Best Практик из Yii2
    Ответ написан
    8 комментариев
  • Как реализовать автономное приложение?

    petermzg
    @petermzg
    Самый лучший программист
    При добавлении записей в локальную таблицу устанавливайте им id выше 1 млрд.
    Когда появиться коннект, то сделайте выборку по таким данным и отправьте их на сервер.
    Верните результат [{oldid, newid}, ...] и сделайте апдейт id для записей.
    В серверной БД еще добавьте поле "время последнего обновления", это чтобы получать с сервера
    только измененные данные.
    Ответ написан
    2 комментария
  • Как поставить брекпоинт в php-функции, вызываемой из ajax запроса?

    @kryvel
    Системный администратор
    Конечно можете, вызов функции через ajax ничем не отличается от обычного вызова
    Ставите в коде брекпоинт, включаете в браузере дебаг, запускаете ajax и phpstorm перехватывает вызов
    Ответ написан
    Комментировать
  • C# как сравнить два списка List?

    AnnTHony
    @AnnTHony
    Интроверт
    foreach (var item in list1.Where(item => list2.Contains(item.Substring(0, 32))))
    {
       // Console.WriteLine(item);
    }
    Ответ написан
    3 комментария
  • Что подразумевается под получением ресурса и его инициализации в RAII?

    AtomKrieg
    @AtomKrieg
    Давай я поищу в Google за тебя
    RAII это оборачивание в класс некоторой "сырой" сущности. Сущность может быть любая, но с ней неудобно работать, потому что надо следить за созданием и уничтожением в программе. Например

    class WinAPI32_Window
    {
    HWND hWnd = 0; // <--ресурс
    public:
      WinAPI32_Window()
      {
        //100 строк для регистрации класса окна и создания окна
        hWnd = CreateWindow(/* много параметров */); // <--получаем ресурс
    
        if (!hWnd) throw std::system_error("win creation error"); // кидаем исключение в конструкторе, если окно не создается, то объект не создается тоже 
        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);
      }
    
      ~WinAPI32_Window()
      {
        DestroyWindow(hWnd);  // <-- освобождение ресурса
      }
    }
    
    //ну а дальше в программе:
    try {
      auto win = new WinAPI32_Window; //создаем объект = инициализируем и получаем внутри hWnd
    } catch //...
    //работаем
    delete win; //освобождаем ресурс путем удаления объекта
    Ответ написан
    1 комментарий
  • Как защитить БД Access в Delphi?

    @younghacker
    В вопросе явно мало вводных данных.

    Аксес для этой задачи однозначно не подходит Хотя если построите трёхзвенное приложение и будете шифровать все критические поля то можно помучаться.

    Я бы сделал так:
    Разместил бы базу на другом сервере. FireBird.
    В ней завёл бы обычного юзера. Пользователю разрешл бы читать только определённые объекты tables, views и выполнять определённые процедуры. Другими словами сделал бы так чтобы пользователь не мог читать писать то что ему нельзя. Там же на сервере запустил бы другое приложение задача которого подсоединиться к базе как sysdba и прочесть табличку с логинами паролями пользователей и сидеть ждать соединения пользователя. Вторая задача серверного приложения принимать соединения по ssl и дешифровать их. Тут же должна быть защита от подбора пароля.
    На клиенте бы использовал ssl.
    Но у этого решения есть большая проблема чтобы обезопаситься от dll injection нужно избавиться от внешних ssleay.dll и fbclient.dll нужно взять их исходники и внедрить в приложение без использования техники dll. А это явно не Delphi.

    Но главный вопрос что Вы хотите сделать?
    Если пользователь может запустить приложение и пользоваться им то что ему мешает сделать простой скрипт который распарсит данные из базы? Любое Windows GUI приложение которое использует Windows API может быть обмануто внешней программой.

    Если задача ограничить пользователя только его песочницей -- то тут нужно работать над устройством базы данных её структурой и бизнеслогикой. Firebird позволяет используя только возможности сервера сделать различные ограничения в том числе отображать записи из таблицы избирательно через view (блокируя при этом доступ к таблице).

    Но если база физически доступна пользователю то шифруйте её. Возможно есть какие-то готовые решения.
    Ответ написан
    Комментировать
  • Учебники или видео курсы по C# для начинающего изучать этот язык программирования?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    MVA
    Ответ написан
    Комментировать
  • Возможно ли работать удаленно и при этом быть официально трудоустроеным согласно ТК РФ?

    @3617
    В Трудовом кодексе произошли изменения. Теперь в нем появилась новая глава, регулирующая отношения между работодателями и дистанционными работниками1. Какова практическая значимость таких изменений, а также кого можно отнести к категории удаленных работников, читайте в статье:

    www.garant.ru/company/garant-press/ab/477320/2/#ix...
    Ответ написан
    1 комментарий
  • Управление памятью в С++?

    @isotoxin
    Высокоуровневые языки со сборщиками мусора, конечно, просты в использовании, но не дают понять сути происходящего. В этом их минус. А суть в работе с памятью такова:
    Любой объект ненулевой длины, любая переменная - всё требует место в памяти. Это в любом языке. Это фундамент мироздания.
    Вопрос только в том, как язык эту память выделяет или дает выделять программисту.
    Когда вы объявляете глобальную переменную, память под нее выделяется при старте программы. Это делается операционной системой в процессе загрузки программы. Управлять этим процессом можно, но новичку лучше пока голову не забивать. Далее. Переменная внутри функции. Память под такую переменную выделяется на стеке в момент вызова функции и освобождается по завершении функции. Тут тоже программист особо на этот процесс не влияет, хотя и может. Есть понимание, что такое стек? На всякий случай вкратце - это специальный участок памяти приложения (обычно 4 мегабайта на поток) как раз для переменных внутри функций. Т.о. если рекурсивная функция вошла в бесконечную рекурсию, она очень быстро выжирает всю память стека и приложение падает.

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

    Наконец, самое сложное - переменные и данные, под которые программист явно запрашивает память.
    В java есть оператор new. В C++ он тоже есть. Они делают одно и тоже - выделяют где-то там (пока что не важно где) место под объект и инициализируют этот объект. А теперь о различии. Это основное отличие языка C++ от языков со сборщиком мусора. В C++ вы должны созданный таким образом объект явно удалить оператором delete. Если вы этого не сделаете, никто за вас это не сделает. Если этого не делать вообще, то приложение просто выжрет всю память и в итоге упадет. В Java вы просто оставляете объект на произвол судьбы и сборщик мусора сам удалит его, когда убедится, что объект больше нигде не используется.
    Вот такое управление памятью.
    Всякие malloc/free и т.п. оставлю без внимания, потому что это больше к C относится. Лучше пока их не трогать.
    Ответ написан
    Комментировать