• Для чего в проектах принудительно используют 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
    Ответ написан
  • После записи данных в файл, ОС при их чтении отдаст из кеша или с диска?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    дубли это зло, не делайте дублей
    Ответ написан
  • Как решить проблему с ошибкой "ERR_EMPTY_RESPONSE, которая предположительно возникает из-за open_file_cache?

    Tolly
    @Tolly Автор вопроса
    Решил углубится в тему, вот результаты:

    Директива open_file_cache применяется для кеширования информации о статических файлах: js, css, jpeg, html,..
    Если файл не существует, или не прав на чтение, то эта информация также может хранится в кеше.
    По умолчанию: open_file_cache off;

    Пример с описанием:
    # Информация о 1000 файлов, может хранится в кеше. Если не было активности к файлу в течение 5 мин, то информация о нем удаляется из кеша
    open_file_cache max=1000 inactive=5m;  
    
    # Активностью считается обращение к файлу хотя бы 2 раза. В кеш они также попадают, если было хотя бы 2 обращения к файлу
    open_file_cache_min_uses 2;             
    
    # Вся информация о файлах в кеше обновляться раз в 1 минуту
    open_file_cache_valid 1m;               
    
    # Сохранять ли информацию об ошибках, например, если файла, к которому вы обратились - нет, то это будет тоже в кеше, информация тоже обновится через 1 мин
    open_file_cache_errors on;


    При работе со статическими файлами, когда они изменяются, например верстке.
    На время работ желательно отключать open_file_cache, либо параметр open_file_cache_min_uses делать достаточно большим, чтобы файл не попадал в кеш, но это фактически тоже самое что и отключить open_file_cache.

    Если файл находится в кеше, при этом происходит изменение файла, то сервер выдаст ошибку ERR_EMPTY_RESPONSE, что значит, что сервер отказал в доступе и не отдал контент.
    При этом сам сервер работает нормально и если обратится к другим файлам, то они легко загружаются.
    Примечателен факт, что если восстановить измененный файл, то сервер его начинает отдавать до проверки open_file_cache_valid. Видимо проверяется контрольная сумма файла, так как дата изменения файла меняется.

    При работе с файловой системой NFS, рекомендуется не включать open_file_cache, так как информация о файлах может не обновляться даже после open_file_cache_valid.

    Написал, а то может кому интересно будет или я забуду :)
    Ответ написан
    Комментировать
  • Конкретная разница между multi_accept on и off?

    @edo1h
    Здесь указывается

    ну там же ответили: один воркер может проснуться и «схапать» все ожидающие входящие соединения, в результате будет дисбаланс ну и вообще не очень хорошо.

    Как стоит поступить на многоядерной системе Debian 11 x64?

    правила простые: если что-то не понимаете — не меняете, дефолт нжинкса достаточно хорош для большинства применений.

    Говоря простым языком, на сайте может быть онлайн более одного человека при multi_accept off?

    ИМХО проще взять и проверить, чем тут спрашивать.

    но раз уж спросили: да, вполне обычное дело иметь сотни-тысячи активных соединений на воркера.
    Ответ написан
    Комментировать
  • Ищю свежую информацию о CloudFlare на 2014 год?

    opium
    @opium
    Просто люблю качественно работать
    Ничего за два года по вашим вопросам не изменилось
    Ответ написан
    Комментировать
  • Чем отличаются директивы root и alias в nginx "на пальцах"?

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    Не совсем.
    Делают они одно и то же только для location /.

    Если у вас, например, location /img, то при
    root /var/www ссылка /img/1,jpg будет вести в файл /var/www/img/1.jpg

    а при alias /var/www та же ссылка будет вести в /var/www/1.jpg.
    Ответ написан
    2 комментария
  • Зачем нужен hostname на VPS и как он связан с fqdn?

    @Cappuccinka
    верю, что разум когда-нибудь победит
    В данном случае виртуальному серверу (VPS) присваивается некоторое имя - hostname, которое, как правило, задается на этапе установки OS но позже может быть изменено.
    Для чего нужно имя (hostname)?
    Во -первых для идентификации сервера, при большом парке серверов необходимо точно понимать, на каком серевере ты находишься. По этой причине hostname должен быть уникальным.
    Во-вторых, для выполнения обращения к серверу по имени (удаленный доступ, авторизация на сервере, выполнение удаленных команд).
    Для доступа к серверу по имени нужно чтоб это имя резолвилось (преобразовывалось в IP-адрес) со стороны адресанта. Это условие выполняется если:
    - локальный DNS сервер адресанта резолвит hostname адресата;
    - hostname прописан вручную в "/etc/hosts", тогда преобразование имени будет происходить без DNS сервера.
    Следует отметить, что в OS Windows обращение к серверу возможно по hostname, тут будет работать механизм NetBIOS.

    FQDN и Hostname могут как отличаться, так и быть идентичными.
    Очень часто значение FQDN понимают как публичную DNS запись типа А ( A-record), это делает данную запись уникальной.
    Однако FQDN может быть уникальным только в пределах определенного сегмента сети или домена, который обслуживается своим DNS.
    Почему некоторое ПО проверяет fqdn?
    Программное обеспечение выполнит резолвинг fqdn-имени и попробует сравнить полученный IP-адрес преобразования с ip-адресом самого хоста. Таким образом сверка IP-адресов может быть проверкой корректности настроек.
    В описанном случае с 10-20 сайтами и почтой на каждом из них , следует понимать, что у каждого сайта есть своё доменное имя, которое сконфигурировано через VirtualHost. По этому можно рекомендовать указать fqdn которое соответствует hostname с доменным именем (проверить можно через команду "hostname -A") и при этом резолвятся в небходимый IP.
    Ответ написан
    Комментировать
  • Какой сервис для сбора доната выбрать?

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

    Понятие грязные деньги - это худшее, что принесла современная финансовая система.

    Вы думаете криптовалюты почему появились? от хорошей жизни да?

    p.s. обычно сервисы посредники задерживают выплаты потому что их так финмониторинг попросил, но могут это делать по собственной прихоти, например потому что по мелочи выводить тупо дорого (переводы дорогие) а еще потому что это выгодно, замораживать чужие деньги на некоторое время, потому что по факту это как получить беспроцентный кредит на сумму всех замороженных денег своих клиентов.
    Ответ написан
    Комментировать