Задать вопрос
  • Почему не выполняется запрос к БД SQlite в Qt 5?

    xpert13
    @xpert13
    Full Stack Developer
    Мне кажется, что всё таки запрос должен быть другой (либо вам нужно менять структуру БД): вы уверены, что нужно сравнивать именно name с id?

    Если всё таки причина не в этом, то попробуйте такой вызов:
    stringQuery =QString("SELECT color FROM cars WHERE name=%1").arg(idCar);
    a_query.exec(stringQuery);


    Всё равно вы не используете prepare по назначению.
    Ответ написан
  • Какие настройки использует laravel5 в .env или config/?

    xpert13
    @xpert13
    Full Stack Developer
    mail.php подтягивает настройки из .env файла, если они там есть. В .env хранятся только те настройки, которые завися от окружения (на локальном сервере может быть один порт для почты, на продакшен другой), а все остальные (такие как название вашего приложения) - хранятся в файлах конфигов.
    Ответ написан
    Комментировать
  • Проблема с js в Safari?

    xpert13
    @xpert13
    Full Stack Developer
    На десктопе всё нормально, проверил 3 раза. На iPhone всё было наоборот: при первом проходе кнопка не появилась, но когда снял все отметки и отметил снова - заработала, при повторном проходе всё работало с первого раза.

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

    xpert13
    @xpert13
    Full Stack Developer
    Записывать в базу MD5 ссылки и срок её истечения. При переходе по ссылке брать MD5, искать по нему запись в БД и если срок не истёк - делать, что нужно.

    Если нужно без БД, тогда единственный вариант - использовать не хеширование, а шифрование.
    Ответ написан
    Комментировать
  • Как получить более 50 видео при помощи youtube api v3?

    xpert13
    @xpert13
    Full Stack Developer
    Судя по документации в ответе на первый запрос должен присутствовать nextPageToken, который нужно подставлять как значение для параметра pageToken, чтобы получить результат следующей страницы.

    По всей видимости сделано для того, чтобы вы не могли парсить выдачу в несколько потоков.
    Ответ написан
    1 комментарий
  • Как правильно использовать JOIN для выборки из нескольких таблиц данные + COUNT(*)?

    xpert13
    @xpert13
    Full Stack Developer
    Правильно делать так:
    В таблице boycotts добавить поля likes_count, dislikes_count, subscribtions_count и пересчитывать их значения каждый раз, когда будет добавляться или удалятся запись из соответствующей полю таблице.

    Плюсы:
    1. Нормальная выборка нужных вам данных
    2. Меньшая нагрузка при выборке данных (этот километровый джоин мало того, что не может решить вашу задачу вообще никак и вам нужно делать несколько отдельных селектов, так он еще будет прилично тормозить при большом количестве данных и/или больших нагрузках)
    3. В перспективе больше возможностей (вы сможете находить boycotts по количеству лайков, дизлайков, подписок)

    Минусы:
    1. Чуть больше телодвижений при создании/удалении лайков, дизлайков, подписке (на практике неощутимо)

    ---

    P.S. Чтобы колонка с результатами не называлась "COUNT(`likes`.`boycottid`)" используйте ключевое слово as и задавайте нужное вам название.
    Ответ написан
    Комментировать
  • Как разделить строку TStringlist без цикла?

    xpert13
    @xpert13
    Full Stack Developer
    Какая задача - такое и решение:

    procedure someProcedure();
    var
      s1, s2 : TStringList;
    begin
      s1 := TStringList.Create;
      s2 := TStringList.Create;
      try
        s1.LineBreak := ' ';
        s1.Text := 'Hello world!';
        s2.Text := s1.Strings[0];
        ShowMessage(s2.Text);
      finally
        s1.Free;
        s2.Free;
      end;
    end;
    Ответ написан
  • Области видимости переменных из разных case внутри одного switch (PHP)?

    xpert13
    @xpert13
    Full Stack Developer
    Тут дело не в том, что переменные в другом case не видны, а в том, что переменная локальная и после того, как $login или $password устанавливается происходит выход из функции.
    Ответ написан
    5 комментариев
  • Delphi, как найти папку на всех дисках в системе?

    xpert13
    @xpert13
    Full Stack Developer
    procedure GetDriveLetters(AList: TStrings);
    var
      vDrivesSize : Cardinal;
      vDrives	: array[0..128] of Char;
      vDrive : PChar;
    begin
      AList.BeginUpdate;
      try
        AList.Clear;
        vDrivesSize := GetLogicalDriveStrings(SizeOf(vDrives), vDrives);
        if vDrivesSize = 0 then Exit;
    
        vDrive := vDrives;
        while vDrive^ <> #0 do
        begin
          AList.Add(StrPas(vDrive));
          Inc(vDrive, SizeOf(vDrive));
        end;
      finally
    	  AList.EndUpdate;
      end;
    end;
    
    function FindFolderOnDrives(sFolderName : String):string;
    var
      i : Integer;
      lDrivers : TStringList;
      sFolderPath : String;
    begin
      Result := '';
      lDrivers := TStringList.Create;
      try
        GetDriveLetters(lDrivers);
        for i := 0 to lDrivers.Count - 1 do
        begin
          sFolderPath := lDrivers[i] + sFolderName;
          if DirectoryExists(sFolderPath) then
          begin
            Result := sFolderPath;
            Exit;
          end;
        end;
      finally
        lDrivers.Free;
      end;
    end;


    Пример использования
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Edit1.Text := FindFolderOnDrives('ASDFG');
    end;
    Ответ написан
    1 комментарий
  • Как парсить с яндекс картинки?

    xpert13
    @xpert13
    Full Stack Developer
    Прокси либо сервисы разгадывания каптчи. Но как по мне прокси надежнее.
    Ответ написан
    Комментировать
  • Delphi. Как Узнать номер диска по его букве?

    xpert13
    @xpert13
    Full Stack Developer
    type
      TDiskExtent = record
        DiskNumber: Cardinal;
        StartingOffset: Int64;
        ExtentLength: Int64;
      end;
      
      TVolumeDiskExtents = record
        NumberOfDiskExtents: Cardinal;
        Extents: array[0..0] of TDiskExtent;
      end;
    
      PVolumeDiskExtents = ^TVolumeDiskExtents;
    
    ...
    
    const
      METHOD_BUFFERED                      = 0;
      FILE_ANY_ACCESS                      = 0;
      IOCTL_VOLUME_BASE                    = DWORD('V');
      IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS = ((IOCTL_VOLUME_BASE shl 16) or (FILE_ANY_ACCESS shl 14) or (0 shl 2) or METHOD_BUFFERED);
    
    ...
    
    function GetLD(Drive: Char):Cardinal;
    var
      Buffer : String;
    begin
      Buffer := Format('\\.\%s:', [Drive]);
      Result := CreateFile(PChar(Buffer), 0, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
    end;
    
    function GetPhysicalDiskNumber(Drive: Char):Byte;
    var
      LD : DWORD;
      DiskExtents : PVolumeDiskExtents;
      DiskExtent : TDiskExtent;
      BytesReturned : Cardinal;
    begin
      Result := MAXBYTE;
      LD := GetLD(Drive);
      if LD = INVALID_HANDLE_VALUE then exit;
    
      try
        DiskExtents := AllocMem(Max_Path);
        DeviceIOControl(LD, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, nil, 0, DiskExtents, Max_Path, BytesReturned, nil);
        if DiskExtents^.NumberOfDiskExtents > 0 then
        begin
          DiskExtent := DiskExtents^.Extents[0];
          Result := DiskExtent.DiskNumber;
        end;
      finally
        CloseHandle(LD);
      end;
    end;


    Источник: https://www.experts-exchange.com/questions/2413489... (я код немного подправил)
    Ответ написан
  • Как установить свои горячие клавиши на каждую раскладку клавиатуры в Ubuntu?

    xpert13
    @xpert13 Автор вопроса
    Full Stack Developer
    В общем сделал довольно костыльное, но вполне рабочее решение. Написал скрипт, который эмулирует нажатие клавиш переключения раскладки нужное количество раз. Для работы скрипта необходимо установить "xkb-switch" (для определения текущей раскладки клавиатуры) и "xdotool" (для эмуляции нажатия клавиш). Запуск скрипта вешается на нажатие нужных вам клавиш.

    Код скрипта:
    #!/bin/bash
    source_lang=`xkb-switch`
    dest_lang=$1
    
    # Если уже на нужной раскладке
    if [[ "$source_lang" == "$dest_lang" ]] 
    then
    	exit 0
    fi
    
    # Необходимая задержка (без неё не сработает)
    sleep 0.3
    
    # Если 1 раз нужно нажать на переключение раскладки
    if [[ 
    	("$source_lang" == "us" && "$dest_lang" == "ru") || 
    	("$source_lang" == "ru" && "$dest_lang" == "ua") ||
    	("$source_lang" == "ua" && "$dest_lang" == "us")
    ]] 
    then
    	xdotool key super+space
    	exit 0
    fi
    
    # Если 2 раза нужно нажать на переключение раскладки
    if [[ 
    	("$source_lang" == "us" && "$dest_lang" == "ua") ||
    	("$source_lang" == "ru" && "$dest_lang" == "us") ||
    	("$source_lang" == "ua" && "$dest_lang" == "ru")
    ]] 
    then
    	xdotool key super+space super+space
    	exit 0
    fi


    К сожалению скрипт не универсальный (я до этого вообще скриптов на баше не писал), потому он заточен под конкретный случай. В данном случае это:
    1. Три языка, которые идут в порядке Us, Ru, Ua
    2. Переключение раскладки в системе установлено на super+space

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

    Скрипт запускается командой "<путь_к_скрипту> <код_языка>", например, если ваш файл находится в домашнем каталоге и имеет имя "language_switcher.sh", тогда для переключения на русский нужно выполнить "./language_switcher.sh ru" (собственно говоря такие команды и нужно вешать на каждую горячую клавишу)
    Ответ написан
    Комментировать