• Что интересного можно сделать из промышленного ПК?

    DevMan
    @DevMan
    подставку для цветов для бабушки.
    HTPC.
    продвинутый роутер.

    можно еще нафантазировать, но лень.
    Ответ написан
    Комментировать
  • Как убрать задержку переключения языка на Mac OS?

    @lexa72
    Смена языка на MAC OS без задержки и всплывающего окна:
    1. Настройки - Клавиатура - Нажатие клавиши - Выбираем «действие не требуется»
    2. Сочетание клавиш - Клавиши модификации - Клавишу Caps Lock меняем на Глобус, а Клавишу с глобусом меняем на Caps Lock
    3. Настройки - Клавиатура - Источник ввода - Изменить - Включаем: Использовать клавишу Сaps Lock для переключения ...

    Готово, теперь Глобус меняет язык, но и Caps Lock включается долгим удержание Глобуса))

    64f0219d98fe9994666663.png
    Ответ написан
    2 комментария
  • Ошибка Allowed memory size of 4294967296 bytes exhausted (tried to allocate 81920 bytes)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Исправить скрипт, чтобы ему для работы не требовалось 4 Gb оперативки.
    Ответ написан
    1 комментарий
  • Как правильно подходить к возвращаемым типам функциях php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Хорошие вопросы.
    Разумеется, увеличивать количество запросов к БД ради красивой типизации - это абсолютно не вариант.

    Как можно увидеть, в приведенной цитате написано не однозначно, а "скорее всего".
    И поэтому надо конечно стараться, чтобы функция возвращала какое-то одно значение, но не делать этого любой ценой. Поэтому getUserDataFromDatabase вполне может возвращать array|false, а getUserIdFromDatabase - int|false, хотя я бы с ней не заморочивался, первой вполне достаточно. А userIsPresentInDb вообще не нужна, вместо неё можно использовать одну их предыдущих.

    Другое дело, что нужного результата можно добиться и другим способом.
    Ведь вполне можно вернуть пустой массив. И таким образом формально соблюсти типизацию.

    return $result ?: []; // дёшево и сердито

    Но это будет всё равно не очень красиво. В одной стороны - да, для проверки, вернула ли функция непустое значение, такой вариант вполне сгодится. Но с другой стороны все равно как-то неаккуратненько. Ведь мы на самом деле ждём не абы какой массив, а вполне определённый, с конкретным набором полей. То есть, если эта функция вернет массив вида [0, 42, 100500], то это будет явно не то, что нам нужно, но при этом типизация и слова поперёк не скажет.

    Если думать от типизации, то функция getUserDataFromDatabase, возвращающая какой-то абстрактный массив - это нонсенс, бессмыслица. Эта функция должна возвращать юзера. Поэтому в идеале надо придумать способ указать, что функция возвращает не абстрактный, а конкретный массив определенного формата. Тем более, что такой способ как раз есть, ведь типизованный массив - это же объект! И для данного случая даже специальный паттерн есть - ValueObject (хотя в случае с пользователем лучше будет все-таки делать полноценный класс, содержащий не только данные, но и методы, например auth(), который сравнивает хэш пароля с введенным).

    Соответственно, в идеале функция должна возвращать объект, представляющий пользователя.

    И уже в этом объекте поле id может либо либо быть нулём, либо иметь какое-то положительное значение. Или даже объект может содержать отдельное свойство, заполнен/не заполнен.

    И вот в этом случае типизация заиграет совсем новыми красками, и будет использоваться на 100%
    function getUserFromDb( int $userId ) : UserObject {
            return $result ? UserObject::fillFromArray($result) : new UserObject();
    };
    $user = getUserFromDb();
    if (!$user->id) {
        // нинашли :'(
    }


    Но опять же, как пишет ниже Сергей delphinpro, зависит от задачи.
    И решив проблему правильной типизации значения, которое функция вернет, если нашла пользователя, можно вернуться к вопросу о том, что возвращать, если функция ничего не нашла. И в этом случае вполне подходящим вариантом будет вернуть null
    function getUserFromDb( int $userId ) : ?UserObject {
        return $result ? UserObject::fillFromArray($result) : null;
    };
    
    if ($user = getUserFromDb()) {
        // нашли :)
    }
    Ответ написан
    6 комментариев
  • Как получать несколько картинок через одну форму?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Есть подозрение, что вы, как истинный буддист, следуя принципу одно дело за раз, делаете добавление картинок по одной, то есть открыли диалог, выбрали 1 файл, нажали ок, снова открыли диалог...
    Ответ написан
    Комментировать
  • Как для двух доменов одного сайта, запретить индексацию одного из их?

    @dmitryim
    Мы решаем на уровне веб-сервера (nginx).

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

    location /robots.txt {
        set $disallow_indexing '';
    
        if ($host ~ demo\.) {
            set $disallow_indexing 'yes';
        }
    
        if ($disallow_indexing = 'yes') {
            root /var/www/html;
        }
        if ($disallow_indexing != 'yes') {
            proxy_pass      $proxy_addr;
        }
    }


    Содержимое /var/www/html/robots.txt:

    User-agent: *
    Disallow: /


    Итого получается, что если запрашивается robots.txt с домена demo.site.ru, то ему отдается Disallow. Если же домен не содержит demo, то отдается тот robots.txt, который лежит в проекте.

    Решение получается надежным и удобным т.к. не приходится помнить про каждый отдельный проект - все демо домены закрываются автоматически.
    Ответ написан
    1 комментарий
  • QR-код с изменением цены или др.инф?

    hint000
    @hint000
    у админа три руки
    Это называется каталог товаров для интернет-магазина. QR будет ссылкой на страницу с конкретным товаром.
    Идёте на фриланс, пишите задание, договариваетесь о цене и сроках исполнения, для вас напишут такую программу.
    Ответ написан
    2 комментария
  • У меня есть сервер на python его адрес http://127.0.0.1:5000, но когда на другом устройстве переходишь по этому адресу то пишет страница не найдена?

    hint000
    @hint000
    у админа три руки
    127.0.0.1 на любом устройстве означает "я сам".
    Например, ваш однокласник Вася говорит: "я вчера ходил в кино с Юлькой". И вы говорите "я вчера ходил в кино с Юлькой". Фраза одна и та же, но Вася сказал правду (сервер работает), а вы соврали, потому что "я" (127.0.0.1) разные, у каждого своё "я", у каждого свой локальный сетевой интерфейс.
    Ответ написан
    Комментировать
  • Можно ли без особых знаний php доработать phpgeo под работу с запросами?

    "Если долго мучиться, что-нибудь получится"
    А, если долго мучиться не хотите, то вам сюда https://freelance.habr.com/
    Ответ написан
    Комментировать
  • Почему bootstrap создает стили отдельно?

    @HippieCocoa Автор вопроса
    Задал вопрос и тут же осознал свою проблему. Я подключал стили ещё и через javascript, поэтому они и появлялись в образе тега
    6409bc474a1fd707157623.png
    Ответ написан
    Комментировать
  • Как можно использовать Foreign Key?

    TMProject
    @TMProject
    Frontend developer React/Redux
    Foreign key (внешний ключ) - это механизм, который позволяет связывать данные из двух таблиц в базе данных, где одна таблица ссылается на другую посредством поля, которое является первичным ключом в таблице, на которую она ссылается.

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

    Чтобы создать foreign key, вы должны выполнить следующие шаги:
    1. Создайте таблицу, которая будет ссылаться на другую таблицу:
      CREATE TABLE table1 (
          id INT PRIMARY KEY,
          name VARCHAR(50),
          table2_id INT,
          FOREIGN KEY (table2_id) REFERENCES table2(id)
      );


    2. Создайте таблицу, на которую будет ссылаться первая таблица:
      CREATE TABLE table2 (
          id INT PRIMARY KEY,
          name VARCHAR(50)
      );


    3. Установите связь между таблицами с помощью ключевого слова REFERENCES:
      FOREIGN KEY (table2_id) REFERENCES table2(id)


    В этом примере, мы создаем таблицу table1, которая имеет поле table2_id, которое ссылается на поле id в таблице table2. С помощью ключевого слова FOREIGN KEY мы говорим базе данных, что это поле должно быть связано с полем id в таблице table2.

    Также мы можем добавить ограничение ON DELETE, чтобы определить, что происходит с записями в таблице, которые связаны с удаленными записями из другой таблицы. Например:
    FOREIGN KEY (table2_id) REFERENCES table2(id) ON DELETE CASCADE

    В этом примере, мы указываем, что при удалении записи из таблицы table2, все связанные записи в таблице table1 также должны быть удалены (CASCADE).

    Таким образом, использование foreign key может значительно улучшить целостность данных в вашей базе данных, облегчить ее обслуживание и предотвратить появление ошибок в будущем.
    Ответ написан
    Комментировать
  • Как извлечь данные из привязанной таблицы?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    JOIN
    Ответ написан
    Комментировать
  • Не определяется GyverPortal: 'GP' was not declared in this scope; did you mean 'GPC'?

    AlexGyver
    @AlexGyver
    точка с запятой пропущена, в примере они везде стоят после макросов
    Скриншот фрагмента кода удалён модератором.
    И ещё дальше по коду не хватает, ищите :)
    Ответ написан
    1 комментарий
  • Почему не работает телеграм бот для удаления опредленного стикера?

    @igor6130
    Код сгенерирован с помощью ChatGPT.

    Предлагаю ChatGPT этот вопрос и задать.
    Ответ написан
    Комментировать
  • Как вычислить виновника из-за которого отваливается интернет с какой-то периодичностью в маленькой сети?

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

    Итак, пробежимся по перечисленным пунктам сначала.
    1. Критерии. Поиск критериев - это часть решения. Обычно в этом случае нуно сорать необходимую статистику. Есть куча софта, который это умеет делать, но пинг есть всегда под рукой.
    Для этой тулзы есть две полезных опции: ключ для бесконечного пинга и размер пакета.
    В разных ОС эти ключи немного разные, поэтому ищите их отдельно, у меня нет винды под рукой, поэтому не стану на этом заострять.
    Скаж лишь, что пинговать лучше большими пакетами, жалетально превышающими размер TTL, прописанный в роутере. Тогда такой пинг будет реже проскакивать в периоды хорошей связи, то есть выловит больше пролблем.
    Пинговать нужно в отдельных окнах сразу несколько хостов:
    - ya.ru - этот хост всегда отвечает на пинги и выявит проблемы с DNS
    - 8.8.8.8 - это гугловый DNS-сервер, тоже всегда отвечает на пинги, покажет, что связь с инетом есть даже если DNS, прописанныйна компе не правильно работает.
    - 192.168.0.1 - или какой там IP у вашего роутера. Нужно. чтбы отделить проблемы с инетом от проблем с внутренней связностью до роутера
    - 192.168.0.x - ip одного из компов в сети. Я обычно пингую несколько компов, доступных через баксимальное число потенциально проблемных узлов - ethernet-розеток, свичей, вайфай-соединений... Этот пинг поможет понять где проблема, во внутрисетевой связности или в последней миле.

    Учтите, что проблемы часто бывают комбинированные и каждое сочетание симптомов будет свидетельствовать о раных проблемах.
    Да, тревожным принаком может служить не только пропадание пакетов, но и скачки в длительности их возврата, особенно если такие длительности достигают 500мс и выше. Но и скачки от 3мс до 250мс тоже будут свидетельствовать о каких-то проблемах.

    Запускать пинг на всех компах лучше одновременно и на некоторое время. Например минут на 20. Потом по статистике будет видно сколько где пакетов пропало.

    2. Если критерии наличия проблемы позволяют, то можно попробовать отрубать части сети и смотреть наличие проблемы. Это я в том смысле, что если проблема происходит в среднем раз в пару-тройку часов, то отрубать на многие часы части сети при диагностикем ожет быть неприемлемым.
    Редкеи пробемы дольше отлавливать. Но напоминаю, что критерии можно детализировать, ведь если пакеты у вас пропадат относительно редко, то скачки времени их возврата могут случаться чаще и подсвечивать проблему. Также можно сделать рамер пакета близким к максимальному, это должно тоже в некоторых случаях участить проявление проблемы.
    Иногда не мешает нагрузить сеть комированием по локалке большого файла. В линуксе можнно с помощью утилиты tc послать большой поток рандомных байт на любой сокет..
    3. Плавающие проблемы случаются из-за плохого обжима, перебитого жверью кабеля, перегрызенного UTP в плинтусе, из-за умиращих конденсаторов в блоке питания роутера (БП может не выдавать необходимого при нагрузках тока, но вольтметром такая неисправность не будет различима без нагрузки). Вообще старые (да и не только) роутеры могут страдать поплывшими электролитическими конденсаторами не только в блоках питания.
    Хорошо, когда можно подменить роутер.
    4. ну с четвертым пунктом ничего не пососветуешь, только разделать и тестировать все по отедльности и в разных сочетания и да поможет нам ктулху.

    А для тех, кто дочитал этот опус до конйа - интересная задачка. Что пингуют эти команды, как и почему?
    ping 1.1
    ping 2130706433

    Тех, кто знает, попрошу не спойлерить=)
    Пусть для кого-то будет сюрпризом этот дивный мир=)

    UPD. Простите за адское количество опечаток в тексте. Писал в спешке и с непривычной клавиатуры. Исправлю всё попозже. Не ожидал, что многим ответ придётся по душе. Вроде ж накапитанил как мог.
    Ответ написан
    5 комментариев
  • Как спарсить php network?

    @Wispik
    Так и парсить.
    Делай запрос на /statusUpdate.php
    Ответ написан
    Комментировать
  • Нет ли проблем при использовании павербанка для зарядки ноутбука?

    @Voland69
    Обычный USB не поможет, а вот Power Delivery справится.
    Соответственно нужен переходник со встроенным PD триггером и нужными параметрами на выходе и банка с PD с нужной мощностью (потому как профили разные бывают по напряжению и по току, а переходник чуда не сделает - если банка не умеет отдавать 20 Вольт то зарядки бука не произойдет).
    Что до опыта - я для зарядки старого макбука юзаю вот такой провод, правда не с банкой, а с сетевым Type-C PD блоком - все работает, проблем нет.
    Ответ написан
    Комментировать
  • Как в php подменять file_get_contents на другой url?

    DevMan
    @DevMan
    понять вообще рабочий цикл программы: она выполняется от начала до кoнца и все.
    если надо больше, нужно привлекать внешние средства. в простом случае – цикл.

    сделайте массив с адресами и в цикле их подставляйте в запрос.
    потом придете к ассинхронщине/multi–curl.
    Ответ написан
    Комментировать
  • Как добавить возможность указывать количество товаров в сгруппированном товаре?

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    Как добавить возможность указывать количество товаров в сгруппированном товаре?

    Нанять программиста который умеет
    Ответ написан
    Комментировать
  • Возможно ли связать два python приложения?

    Dr_Elvis
    @Dr_Elvis Куратор тега Python
    В гугле забанен
    Возможно
    Ответ написан
    2 комментария