• Как шарить изображения в telegram mini apps js?

    @GrigoryMorozov
    Если мини-приложение запускается с помощью инлайн-кнопки, а вы хотите отправить изображение в чат с ботом, используйте серверный метод answerWebAppQuery. Реализация примерно такая:
    1. Отправляете сгенерированное изображение вместе с параметром initData собственному серверному скрипту
    2. Проверяете параметр initData, извлекаете из него query_id
    3. Сохраняете сгенерированное изображение
    4. Вызываете метод answerWebAppQuery с извлечённым query_id. В качестве параметра result передаёте InlineQueryResultPhoto со ссылкой на сгенерированное изображение
    5. Сгенерированное изображение спустя какое-то время можно удалить

    Альтернативно, если мини-приложение запускается по прямой ссылке, можно использовать клиентский метод switchInlineQuery. Предварительно выполните шаги 1-3 и сохраните ассоциацию пользователя со ссылкой на сгенерированное изображение.

    После вызова клиентского метода мини-приложение закроется, будет предложено выбрать чат (если передавался параметр choose_chat_types), а бот получит событие inline_query. Ответьте на него с помощью серверного метода answerInlineQuery, используя сохранённую ассоциацию (параметр results в данном случае — массив с одним элементом типа InlineQueryResultPhoto, cache_time должен быть небольшим, а is_personal — true).
    Ответ написан
    Комментировать
  • Как реализуется проверка на бэк энде PHP авторизации у mini app Telegram?

    @nozzy
    Symfony, Laravel, SQL
    Ответ написан
    Комментировать
  • Как перезапустить полностью pixijs?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    GL_INVALID_VALUE: Offset overflows texture dimensions.

    Ошибки такого рода в мире WebGL обычно связаны с тем фактом, что мы пытаемся использовать текстуру, но у нас левые ее размеры, и мы, например, пытаемся получать из нее пиксели за ее границами. Искать проблему нужно вокруг этого факта. На сайте PixiJS можно найти описание основ работы с текстурами, и там сказано, что они кешируются. Если мы делаем Texture.from с тем же источником, то получаем не новую текстуру, а ту, которая уже была. Но в вашем коде где-то по дороге меняются размеры. А сама текстура, сам буфер с пикселями, получается старый, закешированный. Это, вполне вероятно, и вызывает несоответствие. Решением должно быть использование метода destroy() у текстуры, чтобы ее уничтожить с концами при переинициализации. Альтернативно у конструктора Texture.from есть второй параметр skipCache, который по идее даст схожий результат.
    Ответ написан
    1 комментарий
  • Как настроить config:cache для запуска локально?

    @iljaGolubev
    Проще всего в .env файле прописать нужный путь.
    #.env
    APP_SERVICES_CACHE
    APP_PACKAGES_CACHE
    APP_CONFIG_CACHE
    APP_ROUTES_CACHE
    APP_EVENTS_CACHE
    а вообще, смотрите в исходниках как это работает.
    grep -rn APP_ROUTES_CACHE vendor/laravel/
    Ответ написан
    Комментировать
  • Как реализовать сужение\растяжение отрезка с двумя точками в JS CANVAS?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Находите среднюю точку и начальное смещение
    Xc = (X1 + X2) / 2
    Yc = (Y1 + Y2) / 2
    dX = Xc - X1
    dY = Yc - Y1
    Затем просто домножаете смещение на коэффициент растяжения и прибавляете/вычитаете от центральной точки
    X1' = Xc - dX * k
    Y1' = Yc - dY * k
    X2' = Xc + dX * k
    Y2' = Yc + dY * k
    Коэффициент k = 1 соответствует начальному положению точек
    Ответ написан
    1 комментарий
  • Как реализовать ленивую загрузку TFJS и Face Landmarks Detection?

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

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

    script.async = false;

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

    // Functions
    
    const loadedScripts = new Set();
    
    async function loadScript(url) {
      if (loadedScripts.has(url)) return;
      
      const script = document.createElement('script');
    
      script.src = url;
      script.async = false;
    
      document.head.append(script);
    
      return new Promise((resolve, reject) => {
        script.addEventListener('load', () => {
          loadedScripts.add(url); resolve();
        });
      
        script.addEventListener('error', () => reject(
          new Error(`Error loading script: ${url}`)
        ));
      });
    }
    
    async function loadImage(url) {
      const image = new Image();
    
      image.src = url;
      image.crossOrigin = 'anonymous';
    
      return new Promise((resolve, reject) => {
        image.addEventListener('load', () => {
          resolve(image);
        });
      
        image.addEventListener('error', () => reject(
          new Error(`Error loading image: ${url}`)
        ));
      });
    }
    
    // Example
    
    const image = loadImage('https://habrastorage.org/r/w1560/getpro/habr/upload_files/799/62f/375/79962f375d90db7f7d926ff40d623456.png');
    
    await Promise.all([
      loadScript('https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-core'),
      loadScript('https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-converter'),
      loadScript('https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgl'),
      loadScript('https://cdn.jsdelivr.net/npm/@tensorflow-models/face-landmarks-detection@1.0.6/dist/face-landmarks-detection.min.js')
    ]);
    
    const model = faceLandmarksDetection.SupportedModels.MediaPipeFaceMesh;
    
    const detectorConfig = {
      runtime: 'tfjs', 
      solutionPath: 'https://cdn.jsdelivr.net/npm/@mediapipe/face_mesh'
    };
    
    const detector = await faceLandmarksDetection.createDetector(model, detectorConfig);
    const faces = await detector.estimateFaces(await image);
    
    console.log(faces);
    Ответ написан
    1 комментарий
  • Как вырезать в path прозрачное отверстие при помощи того же path?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Просто закрываешь один path и рисуешь дырку в продолжение.
    Примерно так:


    На canvas это можно сделать с помощью параметра fill evenodd:
    Ответ написан
    5 комментариев
  • Какие есть решения на 2024 год для определения дубликата изображений на PHP?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вот хорошая статья в хабре была https://habr.com/en/articles/120562/

    И вроде алгоритм не сложный.
    Ответ написан
    7 комментариев
  • Jupiter lab (Jupiter notebook) это изолированная среда или нет?

    Maksim_64
    @Maksim_64
    Data Analyst
    Могут в изолированной могут в общей, это все равно что спросить я пишу код в vscode куда будут устанавливаться пакеты.

    Если ты ставил анаконду то по умолчанию создается base окружение которое опять таки по умолчанию активировано и установка происходит в него. Если ты просто установил jupyter notebook то он может быть запущен в том числе и на "default"ом python.
    Ответ написан
    2 комментария
  • Как добавлять в билд Vite файл js без type module?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Если ты их руками в html вписываешь - там у тебя в корне должна быть папка public(если нет - создай) - туда и клади, он тупо их перекопирует в dist.
    Если же эти скрипты должны работать где-то в рамках других, то пиши где надо import '<script_path>'; (без from и всего такого).
    Ответ написан
    1 комментарий
  • Как сделать два canvas для одной сцены в three.js?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Точно такая же сцена требуется в другом месте, и не хотелось бы дублировать код и создавать ту же сцену для другого канвас

    Сцену дублировать не обязательно. WebGLRenderer не умеет рендерить в несколько мест одновременно, но можно иметь одну сцену и много рендереров, каждый из которых будет рендерить ее в свой канвас. Это работает.

    Если посмотреть с другой стороны, то возможно, что вам не нужны два канваса. Это может звучать странно, но тем не менее. Пользователь же все равно видит только один экран информации. Можно иметь один канвас на весь экран, и в нем рендерить сцены в какие-то его участки. Там есть такой функционал у рендерера, называется "ножницы" (scissor). Его можно использовать как раз для таких задач. Есть хороший пример в документации.

    Но если делать именно 100% дублирование, то оба этих варианта будут не самыми толковыми с точки зрения производительности. В лоб скопировать уже готовое содержимое канваса в другой через drawImage должно быть проще, чем рендерить всю сцену еще раз. Поэтому решение, которое пришло вам в голову - очень даже ничего в текущем контексте. Хотя и выглядит топорно.
    Ответ написан
    1 комментарий
  • Как вписать текст по его размеру в блок div?

    emekhanikov
    @emekhanikov
    Разработчик и архитектор программного обеспечения
    Добрый день,

    самое простое сделать текст внутри SVG как тут, например
    https://codepen.io/chriscoyier/pen/zaRxdm

    Всего самого наилучшего, надеюсь помог
    Ответ написан
    Комментировать
  • Как узнать какая строка кода посылает запрос в интернет?

    victormayorov
    @victormayorov
    Frontend разработчик
    Попробуйте во вкладке network отобразить колонку `Initiator` 63f64eeae67ed499624541.png
    И тогда по идеи, вы сможете найти откуда был отправлен запрос.63f64f5d7f74e235543702.png
    Ответ написан
    1 комментарий
  • Как сохранить объект с кирилицей в файл формата JSON на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Спорим у вас винда?
    Прочитайте спецификацию функции open. В частности про параметр encoding.
    Когда записываете текст в виде байтов (а в файлах он именно так хранится), то нужно понимать какой кодировкой вы кодируете не ascii-символы.
    Вы явно не указываете кодировку, поэтому выбирается кодировка по умолчанию. Посмотреть что у вас там по умолчанию можно вот этой фунцией sys.getdefaultencoding()
    Именно в такой кодировке нужно открывать ваш файл на чтение, чтобы увидеть там русские буквы.
    В винде у вас скорее всего одна из двух кодировок там может быть. И она разная в зависимости от того в консоли вы запустили свою прогу, или в IDE. А ещё подстава - в винде по умолчанию однобайтовые кодировки, поэтому не все символы можно в них представить!
    С этим в линуксе гораpдо лучше. По умолчани везде utf-8.

    Вот, кстати, можете проверить что получится для понятности:
    > 'íåæèëîãî'.encode('latin1').decode('cp1251')
    'нежилого'
    Ответ написан
    1 комментарий
  • Как уменьшить размер логического диска Ubuntu из под Windows?

    3r1k
    @3r1k
    the quieter you become, the more you hear
    Есть ли какой то софт работающий с linux'овыми ФС?


    Есть - MiniTool Partition Wizard
    Ответ написан
    Комментировать
  • Какой движок лучше выбрать для выбора местоположения на JS?

    @maksam07
    Могу ошибаться, но вроде бы вот этот вариант очень даже хороший из бесплатных:
    https://leafletjs.com/
    Ответ написан
    Комментировать
  • Какой движок лучше выбрать для выбора местоположения на JS?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вот здесь есть подборочка геокодеров: https://gisgeography.com/geocoders/
    А так берите любой, который вам по бесплатным лимитам подходит, если подходит.
    Ответ написан
    1 комментарий
  • Что быстрее поиск по файлу JSON в PHP или в базе посредством MySQL?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Быстрее будет выгрузить всю базу (без разницы из чего, из базы данных, или из JSON-файла) в Javascript нужной страницы, а потом именно Javascript ищет в этом всём выгруженном.
    Ответ написан
    3 комментария