• Как на PHP реализовать светофор?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Никакой интервал тут не нужен, достаточно знать точку отсчёта и стартовое состояние (у вас про них ничего не сказано, но за стартовое состояние по условию можно засчитать зелёный) и использовать простейшую математику, чтобы вычислить текущий сигнал.
    Хотя, если под вводимыми минутами понимается не таймстамп, а количество, прошедшее со времени включения, то в задаче есть все вводные для её решения элементарным алгоритмом.
    А сделать интерактивную смену на php вы всё равно не сможете*.

    *ну, есть, конечно, костыль с meta-тегом refresh, но это уже не про php.
    Ответ написан
    Комментировать
  • Как исправить ошибку JSON Parse Error: Expecting 'STRING' из результат json?

    @pantsarny
    function fixJSON($json) {
        $regex = <<<'REGEX'
    ~
        "[^"\\]*(?:\\.|[^"\\]*)*"
        (*SKIP)(*F)
      | '([^'\\]*(?:\\.|[^'\\]*)*)'
    ~x
    REGEX;
    
        return preg_replace_callback($regex, function($matches) {
            return '"' . preg_replace('~\\\\.(*SKIP)(*F)|"~', '\\"', $matches[1]) . '"';
        }, $json);
    }
    Ответ написан
    Комментировать
  • Facebook + Russia = fail при отправке confirmation code?

    DeusModus
    @DeusModus Автор вопроса
    Пришлось попросить товарища из Лондона дать его номер. Facebook мировая сеть. Да уж.
    Ответ написан
    1 комментарий
  • Какая есть литература про парсинг различных форматов данных?

    GavriKos
    @GavriKos
    У каждого формата есть спецификация - вот ее и читайте
    Ответ написан
    Комментировать
  • Как получить случайную дату между двумя датами?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Вычислить разницу между датами в днях/часах/минутах/секундах (смотря какая точность нужна) =INTERVAL
    Сгенерировать случайное число в диапазоне от 0 до INTERVAL =RAND
    Прибавить к начальной дате RAND дней/часов/минут/секунд
    Ответ написан
    Комментировать
  • Как получить случайную дату между двумя датами?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Посчитать число дней между датами,
    Получить случайное целое от 0 до этого числа дней.
    Добавить к меньшей дате полученные случайные дни.
    $start = new DateTimeImmutable('1878-10-11');
    $finish = new DateTimeImmutable('2009-10-13');
    $interval = $start->diff($finish);
    $daysDiff = $interval->format('%a');
    $randomDays = rand(0, $daysDiff);
    $randomDate = $start->add(new DateInterval("P${randomDays}D"));
    
    echo $randomDate->format('Y-m-d'); // 1896-06-24
    Ответ написан
    Комментировать
  • Как получить случайную дату между двумя датами?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ничто не мешает таймстампу быть отрицательным.
    $t1 = (new DateTimeImmutable('1900-01-01T00:00:00'))->getTimestamp();
    $t2 = (new DateTimeImmutable('1950-01-01T00:00:00'))->getTimestamp();
    $t = rand($t1, $t2);
    print (new DateTimeImmutable())->setTimestamp($t)->format(DateTimeInterface::RFC3339);
    // 1915-10-14T19:08:14+00:00
    Ответ написан
    Комментировать
  • Для чего в проектах принудительно используют use?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Минусы как бы очевидны:
    нет, не очевидны, по крайней мере миллионам разрабов

    1 Код становится трудно читаем. По месту использования не всегда понятно что имеется ввиду под Order::load() - \Framework\Sale\Order::load или \Vendor\Project\Sale\Order::load - приходится проматывать к верху файла.
    Вам как разрабу должно быть в принципе фиолетово, какой из пакетов используется, если они соблюдают один интерфейс. Если не соблюдают, при том что называются одинаково, значит все пошло не так задолго до проблем с определением пакета...

    2 Код становиться длиннее - там где было бы просто:
    \Framework\Main\UI\Extension::load([ 'vendor.module.components.cabinet.personal' ]);
    приходится писать:
    use \Framework\Main\UI\Extension;
    Extension::load([ 'vendor.module.components.cabinet.personal' ]);
    Код становится длиннее в проектах где 2 контроллера и в них по 1 экшену. Там где Extension::load будет вызываться больше одного раза, очевидно экономия на эксплуатации клавиатуры заметно увеличивается. А в больших проектах создание объекта может (и будет) повторяться многократно.

    4 Код становиться замусоренным, так как верхушки файлов запросто превращаются во что-то вроде:
    Если не обращать внимание на отсутствие пункта 3, то... нет, не могу не обращать внимание, вот же торопыга....
    Во первых - данная портянка очень аккуратно прячется любой адекватной ИДЕ,
    Во вторых - это правильно и логично, хранить все импорты в одном месте
    В третьих - если ты пишешь неимпортированный класс в коде - ИДЕ обычно предлагает варианты внесения его в блок импорта, и все выглядит аккуратно.

    И хрен его знает используются импортированные классы ниже ещё или уже нет, ведь никто не убирает этот мусор.
    Хрен не знает, а ИДЕ замечательно знает и даже подсвечивает серым цветом неиспользуемые.
    Ответ написан
    4 комментария
  • Использование LOCK TABLE в MySQL?

    MaxDukov
    @MaxDukov
    впишусь в проект как SRE/DevOps.
    1. нет, не правильно.
    блокировка либо READ, либо WRITE.
    MySQL.
    READ - все(как сам процесс, так и другие) могут только читать.
    WRITE - процесс, который вызвал блокировку, может читать и писать, остальные курят.
    2. попробовать из другой сессии произвести запрещенное действие (INSERT/UPDATE/DELETE для READ, что угодно для WRITE) - запрос "зависнет" до разблокировки. Или до таймаута.
    3. Будет ждать до таймаута.
    Ответ написан
    Комментировать
  • Во что конвертировать огромный, сотни ГБ, CSV-файл для максимально быстрого чтения по «ключу»?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    Встраиваемое kv-хранилище от гугла - leveldb вам в помощь. Обертки есть почти под каждый популярный ЯП.

    leveldb используется для хранения транзакций в клиенте биткоиана, а там уже, на минуточку, объем БД перевалил за 200 гигов.

    Только учитывайте, что магии не будет, когда БД в RAM не вмещается, и боттлнек будет на дисковой подсистеме. Сильное ускорение будет давать быстрый ssd, особенно который nvme через pci.
    Поэтому на частые запросы обмазываемся кэшами и, возможно, радуемся.

    Т.к. это встраиваемое хранилище, то всю сетевую обвязку придется реализовывать самому.
    Ответ написан
    6 комментариев
  • В чём разница между isNaN и isFinite?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Пример, опровергающий утверждение о зависимости этих двух методов:
    var n = 2/0; // деление на ноль
    isFinite(n)  // false
    isNaN(n)     // false
    Ответ написан
    Комментировать
  • Как выбрать базу данных?

    Есть необходимость писать в базу данных по 10к записей в секунду. .....Чтение относительно редко из бд происходит, только запись очень частая
    Не проще писать в файл? Это не шутка. Если только писать и практически не читать. Логи nginx легко могут лететь с такой скоростью.
    Ответ написан
    Комментировать
  • Как расшифровать luaq?

    dollar
    @dollar Куратор тега Lua
    Делай добро и бросай его в воду.
    Лучше начать с другого конца. Не с расширения файла и его содержимого, а с того, кто и зачем его создал, какое приложение. Далее с помощью гугла можно узнать про это приложение больше информации, что у него за файлы там такие и для каких целей. Какая история создания этого приложения. Чем авторы пользовались при разработке. Может это вообще к языку Lua не имеет отношения. А если имеет, то станет ясно, с чего начать "вскрытие" этой каши.

    Ну а если есть доступ к автору, то тогда совсем всё просто - можно спросить автора лично, чем он запаковал свои файлы, и можно даже попросить исходники. Не факт, что даст, но это то, с чего стоит начать. Можно написать не напрямую разработчику, а хотя бы в тех. поддержку.

    Ведь кто угодно и что угодно может назвать *.luaq, и на основании одного лишь расширения и отсутствия текста внутри было бы странно заключать, что конкретно там содержится, и уж тем более чем вскрывать. А больше подсказок в вопросе вы не привели.
    Ответ написан
    Комментировать
  • Можете объяснить асинхронность в JS?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    WebAPI браузера поедоставляет вещи типа setTimeout, или async await, коллбек-функции которые закидываются в очередь, а оттуда в порядке своей приоритетности попадают в стек по очереди. Промисы обрабатываются в приоритетном порядке.
    Обычные callback-функции не попадают в очередь, они вызываются в общем стеке. Кроме промисов в приоритетную очередь микрозадач функция может быть добавлена через queueMicrotask(function).
    А что если "асинхронные" операции занимают много памяти и выполняются долго. Если они выполняются в том же стеке, то они также перекроют доступ ко всем остальным операциям?
    Асинхронные операции выполняются отдельными служебными потоками параллельно с основным стеком. Поэтому сами они не могут заблокировать основной стек. По завершению/таймеру асинхронная операция кладёт функцию в очередь микро- или макрозадач.
    Ответ написан
    Комментировать
  • Как можно оценить стоимость домена?

    @malbaron
    Вся соль в использовании.
    Зачем он нужен покупателю.

    У меня есть интернет-магазин, который уже 11 лет приносит в месяц гораздо больше, чем его домен оценивают доменооценщики.
    Разумеется, я не продам этот домен и в 10 раз выше их оценок.
    Ответ написан
    Комментировать
  • WebRTC, сервер как участник

    RUVATA
    @RUVATA
    Разработчик, гик, меломан, разгильдяй
    Можете выбирать из готовых библиотек, вот список
    У каждой из них есть дока и примеры, ну и минимум по одной статейке (англ.) с примером применения (гугол найдеть)
    Плюсы и минусы в избытке.

    Первым из появившихся, а как следствие самым «прокачаным» и стабильным является модуль WebRTC.io,
    большая часть остальных — его форки.
    WebRTC.io (WebRTC-клиент для ноды )

    PS: Тем не менее со стороны сервера WebRTC не представляет ничего особенного, с ним можно управляться при помощи всем известного socket.io (например вот так).
    Что в общем-то и советуют делать некоторые умные люди, так как задача весьма специфична для решения через дополнительный уровень абстракции.

    PPS: собственно сабж IRL (с исходниками)
    Ответ написан
    1 комментарий
  • Не знаете, о какой книге по С++ идёт речь?

    @iliketech
    Таненбаум. Кажись "Современные операционные системы". Книга из серии "Классика Computer Science". В конце была дана ОС "Minix", на концепцию которой когда-то опирался Торвальдс, вроде как.
    Ответ написан
    1 комментарий
  • При записи данных в файл, они остаются в кеше ОС для возможности чтения из кеша?

    gbg
    @gbg Куратор тега Linux
    Любые ответы на любые вопросы
    Важно понимать следующее: нет никакой ложки

    С точки зрения Линукса, данные, которые вы якобы пишете на диск - это страницы в памяти, которые помечены как неанонимные (это значит, что на диске есть файл, который с ними связан), и грязные (а это значит, что эти страницы надо сбросить на диск).

    Причем момент, когда произойдет сброс, зависит от кучи факторов - программист на это может влиять таким образом:

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

    То есть, программист может потребовать, чтобы данные сбросились на диск пораньше, но не попозже.

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

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

    А теперь важный вопрос - как же понять, остаются ли данные в кэше после записи. Да легко.

    -очистите кэш sync; echo 1 > /proc/sys/vm/drop_caches
    -посмотрите, что желтая часть на полоске памяти в htop исчезла
    -запустите DD, запишите на диск гигабайт. (dd if=/dev/urandom of=test.raw bs=8M count=128 status=progress)
    -посмотрите, что у вас нарисовался желтый гигабайт
    -можете потом считать этот файл и увидеть офигительную скорость - выше гигабайта в секунду (у меня получается 6, что очевидно говорит о том, что чтение происходило из RAM). Последнее лучше делать, если писали на HDD - потому что хороший SSD может выдать столько же

    Объективно, этот тест показывает, что ДА, записанные данные остаются болтаться в памяти.

    Но при этом, момент, когда эти данные оттуда уйдут, зависит от множества факторов (скажем, если памяти - в обрез, PageCache пойдет под нож в первую очередь). Так что может оказаться полезным использовать другие стратегии - например, mmap
    Ответ написан
    Комментировать
  • При записи данных в файл, они остаются в кеше ОС для возможности чтения из кеша?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Предположение так себе. Обьясню почему.
    Вы игнорируете стандартные процедуры ос threading, file locking и пытаетесь получить воспроизводимый результат.
    Возможно это получится, но стоит изменится ядру и ваши труды станут не нужными
    Ответ написан
    Комментировать
  • После записи данных в файл, ОС при их чтении отдаст из кеша или с диска?

    justhostRU
    @justhostRU
    зависит от настройки swappiness
    типа ФС.
    ну и на худой конец
    vm.vfs_cache_pressure=50
    vm.dirty_writeback_centisecs=15000
    vm.overcommit_ratio = 100
    vm.overcommit_memory = 1
    Ответ написан