Задать вопрос
  • Мало памяти на компьютере. Что делать?

    Adamos
    @Adamos
    На эти нетбуки нормально встает Линукс. На некоторые даже предустанавливался.
    И место не сжирает, что характерно, и те же задачи серфинга и киношек нормально решает (а ничего более серьезного на этом барахле все равно не поделаешь).
    Один раз поставил - и забыл всю эту головную боль с пропадающим местом и его постоянной чисткой.
    Ответ написан
  • Как можно реализовать пагинацию в Java, в том случае, когда данные для фильтрации должны браться из двух разных микросервисов?

    @Akela_wolf
    Extreme Programmer
    1. Подумать - что это за странное разбиение на микросервисы, которые оперируют связанными данными? Возможно тут что-то не так (и сильно не так)
    2. Подумать - не стоит ли данные денормализовать и сдублировать данные о пользователе (или работе) в какой-то из двух микросервисов.
    3. Выгребать все данные без фильтрации и делать фильтрацию и пагинацию уже на сервисе-потребителе. Но тут все зависит от объема данных. Если там десятки-сотни мегабайт - это окажется очень грустно.

    Но лично я бы в первую очередь заподозрил необходимость рефакторинга. И, возможно, слияния этих микросервисов.
    Ответ написан
    Комментировать
  • Можно ли хранить данные не в БД, а в JSON файле?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Можно, но это будет очень глупо, особенно по причине "снизить нагрузку на БД". Не переживайте, пупок у СУБД не развяжется от ваших пяти посетителей в месяц, просматривающих семнадцать товаров. Он не развяжется даже при объёмах на пять порядков больших.
    Плюсов у такого подхода примерно ноль в обычных проектах, а минусы - всё остальное.
    Ответ написан
    5 комментариев
  • Какие есть книги по расчёту оборудования под инфраструктуру сайта?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых, в связи с быстроменяющимися технологиями такие книги устаревали бы к моменту выхода, так как верстка и написание их занимала бы больше времени чем время между анонсами нового серверного железа.

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

    В третьих - профиль нагрузки у очень похожих приложений может сильно отличаться, в силу специфики приложения.

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

    Как с этим жить?
    Нагрузочное тестирование на спектре нагрузок, аппроксимация роста нагрузки с ростом операций, расчет от текущего железа вверх согласно предсказанному росту нагрузки. Пока ничего умнее не придумали.
    Ответ написан
    Комментировать
  • Какие есть книги по расчёту оборудования под инфраструктуру сайта?

    Sanes
    @Sanes
    Нет таких и быть не может. Такие вещи решаются опытным путём на месте.
    Ответ написан
    2 комментария
  • Оригинальный Windows XP на современный компьютер?

    CityCat4
    @CityCat4
    Дома с переломом ноги
    Нет, потому что lenovo ideapad - это не компьютер. Это ноутбук. А с ноутами были проблемы даже в те времена, когда хрюня была в активной разработке, а сейчас там просто половина устройств работать не будет.
    wifi, сеть, тачпад, батарейка - все мимо.

    Если нужна хрюня - ставьте на VB
    Ответ написан
    Комментировать
  • Как отнять в php одно время от другого, если изначально значения времени являются строками?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    print DateTime::createFromFormat('H:i', '15:00')
        ->diff(DateTime::createFromFormat('H:i', '14:30'))
        ->format('%H:%i');
    // 00:30
    Ответ написан
    Комментировать
  • PHP компилятор работает нативно в Visual Studio Code или нужно докачивать что-то?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    PHP работает безо всяких компиляторов, это интерпретируемый язык.
    Ответ написан
    Комментировать
  • Насколько резонно подключать библиотеки для таких вещей как модалка, маски и тд?

    Igor_307
    @Igor_307
    Фрилансер
    Все нужно плясать от того насколько процентов используется функционал этого готового решения. На примере той же модалки, если от нее использовать только показать блок, то можно обойтись и без него.
    В любом случае чем меньше размер вашего js тем более лучшие показатели CWV от сайта можно получить
    Ответ написан
    Комментировать
  • Как создать gitignore файл на маке при выгрузке проекта на gitHub?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Файл .gitignore создают не при отправке готовой работы во внешний репозиторий, а задолго до того. Желательно даже вообще до создания первого локального коммита. Это обычный текстовый файл и он создаётся как и любой другой файл с кодом. Мак тут ничем не отличается от винды или линукса. Разве что Finder не показывает имена начинающиеся с точки. Если нажать command + shift + ., то увидишь скрытые файлы. Но мы всё равно создаём файлы в текстовом редакторе или в IDE, а не в проводнике. И редактор и Git этот файл видят в любом случае.
    Ответ написан
    2 комментария
  • Как сказать процессору "выполни это"?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как сказать процессору «выполни это»?

    Превратить это в бинарник для начала и посмотреть, что там. Это можно (было бы) сделать командой xxd -r dump, но в твоём дампе странный порядок байтов в словах. Можно сначала перевернуть байты, а потом прогнать через xxd:
    sed 's/\([^ ]*\)/\1/;s/ \(..\)\(..\)/ \2\1/g' < dump | xxd -r > bin
    . Прогнав полученный код через дизассемблер можно понять (по переходу к адресу 0x7c05), что это код для бут-сектора:
    $ objdump -b binary -m i8086 -D bin        
    
    bin1:     file format binary
    
    Disassembly of section .data:
    
    00000000 <.data>:
       0:   ea 05 7c 00 00          ljmp   $0x0,$0x7c05
       5:   31 c0                   xor    %ax,%ax
    ...

    Дальше можно записать этот код в образ диска и попытаться загрузиться с него:
    $ head -c 254 /dev/zero >> bin
    $ printf "\x55\xaa" >> bin
    $ qemu-system-i386 -hda bin -d in_asm,exec -D log

    Поискав в созданном логе адрес 7c00 можно увидеть, что код делает при выполнении:
    ----------------
    IN:
    0x00007c00:  ea 05 7c 00 00           ljmpw    $0x0:$0x7c05
    
    Trace 0: 0x7f7a98164f00 [00000000/00007c00/0x40]
    ----------------
    IN:
    0x00007c05:  31 c0                    xorw     %ax, %ax
    0x00007c07:  8e d8                    movw     %ax, %ds
    0x00007c09:  8e d0                    movw     %ax, %ss
    
    Trace 0: 0x7f7a98165040 [00000000/00007c05/0x40]
    ----------------
    IN:
    0x00007c0b:  bc 00 7c                 movw     $0x7c00, %sp
    
    Trace 0: 0x7f7a98165180 [00000000/00007c0b/0x48]
    ----------------
    IN:
    0x00007c0e:  88 16 db 7c              movb     %dl, 0x7cdb
    0x00007c12:  31 c0                    xorw     %ax, %ax
    0x00007c14:  8e c0                    movw     %ax, %es
    0x00007c16:  bb 00 80                 movw     $0x8000, %bx
    0x00007c19:  8a 16 db 7c              movb     0x7cdb, %dl
    0x00007c1d:  b6 00                    movb     $0, %dh
    0x00007c1f:  b1 02                    movb     $2, %cl
    0x00007c21:  b5 00                    movb     $0, %ch
    0x00007c23:  b0 30                    movb     $0x30, %al
    0x00007c25:  e8 53 00                 callw    0x7c7b
    
    Trace 0: 0x7f7a98165280 [00000000/00007c0e/0x40]
    ----------------
    IN:
    0x00007c7b:  b4 02                    movb     $2, %ah
    0x00007c7d:  cd 13                    int      $0x13

    -- он хочет загрузить 48 секторов начиная со второго с текущего диска в память по адресу 0x8000, потом делает какую-то скучную фигню, а потом…
    ----------------
    IN:
    0x00007c2f:  fa                       cli
    0x00007c30:  0f 01 16 f4 7c           lgdtw    0x7cf4
    0x00007c35:  0f 20 c0                 movl     %cr0, %eax
    0x00007c38:  66 83 c8 01              orl      $1, %eax
    0x00007c3c:  0f 22 c0                 movl     %eax, %cr0
    
    Linking TBs 0x7f7a98167580 [00007c2b] index 0 -> 0x7f7a981676c0 [00007c2f]
    Trace 0: 0x7f7a981676c0 [00000000/00007c2f/0x40]
    ----------------
    IN:
    0x00007c3f:  ea 44 7c 08 00           ljmpw    $0x8:$0x7c44
    
    Trace 0: 0x7f7a981678c0 [00000000/00007c3f/0xc0]
    ----------------
    IN:
    0x00007c44:  66 b8 10 00              movw     $0x10, %ax
    0x00007c48:  8e d8                    movl     %eax, %ds
    
    Trace 0: 0x7f7a98167a00 [00000000/00007c44/0x90]
    ----------------
    IN:
    0x00007c4a:  8e c0                    movl     %eax, %es
    
    Trace 0: 0x7f7a98167b40 [00000000/00007c4a/0x90]
    ----------------
    IN:
    0x00007c4c:  8e e0                    movl     %eax, %fs
    0x00007c4e:  8e e8                    movl     %eax, %gs
    0x00007c50:  8e d0                    movl     %eax, %ss
    
    Trace 0: 0x7f7a98167c80 [00000000/00007c4c/0x90]
    ----------------
    IN:
    0x00007c52:  bc 00 c0 07 00           movl     $0x7c000, %esp
    
    Trace 0: 0x7f7a98167dc0 [00000000/00007c52/0xb8]
    ----------------
    IN:
    0x00007c57:  e8 a4 03 00 00           calll    0x8000

    …переключается в защищённый режим и вызывает только что загруженный код.

    как например запихнуть это в exe файл?

    в exe-файл это запихнуть можно, но в таком виде как есть -- это бесполезно, потому что этот код привязан к абсолютным адресам.
    Ответ написан
    Комментировать
  • Как правильно связать php сайт с mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    На частные вопросы ответили в комментариях, поэтому ответим на вопрос из заголовка.

    Чтобы соединить сайт с mysql, в РНР вообще-то есть два API - mysqli и PDO. Несколько лет назад с mysqli вообще невозможно было нормально работать, но на данный момент они выровнялись, хотя PDO все равно удобнее, по трем причинам
    1. Единый интерфейс при работе с различными СУБД (неактуально, если mysql для нас является синонимом слова база данных)
    2. Набор функций-хелперов для получения данных из БД в различных форматах (при желании легко воспроизводится вручную)
    3. Именованные плейсхолдеры (для некоторых это главная причина использовать PDO)

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

    1. Создаём файл`config.sample.php` куда кладем все настройки приложения, в том числе базы данных
    return [
    	'db' => [
    		'host' => '127.0.0.1',
    		'username' => '',
    		'password' => '',
    		'dbname' => '',
    		'port' => 3306,
    		'charset' => 'utf8mb4',
    	],
    ];

    2. В файле, который включается во все скрипты сайта, добавляем код
    if (!file_exists('config.php'))
    {
    	throw new \Exception('Create config.php based on config.sample.php');
    }
    $config = require 'config.php';

    3. И дальше в этом же файле пишем собственно нормальный код подключения к БД
    либо к mysqli
    // включаем режим информирования об ошибках
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    // подключаемся к серверу
    $dbc = $config['db'];
    $db = new \mysqli($dbc['host'], $dbc['username'], $dbc['password'], $dbc['dbname'], $dbc['port']);
    // не забываем установить кодировку, чтобы не было ошибок с кракозябрами
    $db->set_charset($dbc['charset']);

    либо к PDO
    $options = [
        \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
        \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
        \PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $dbc = $config['db'];
    $dsn = "mysql:host=$dbc[host];dbname=$dbc[dbname];charset=$dbc[charset];port=$dbc[port]";
    $pdo = new \PDO($dsn, $dbc['username'], $dbc['password'], $options);

    После того как будет освоена работа с системой контроля версий (а по-хорошему это надо было сделать уже давно) добавляем config.php в файл .gitignore
    Таким образом на каждом хосте, где исполняется этот код, будет собственный файл с настройками, создаваемый по образцу из config.sample.php

    Да, и Очень Важное Дополнение:
    почему нельзя сделать 1 соединение для сайта и не тратить каждый раз время на коннект к БД?

    Никогда не следует переживать по поводу воображаемых проблем. Вот только когда создание коннекта каждый раз станет реальной проблемой, только тогда и начинать переживать по этому поводу и искать пути решения (спойлер: никогда).
    Ответ написан
    14 комментариев
  • Как правильно клонировать приватный репозиторий github?

    @Drno
    Почему люди которые пишут софт, не могут просто прочитать ошибку...
    Ответ написан
    Комментировать
  • Каким образом создание новых экземпляров класса тормозит работу браузера на примере слайдера?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    С чем это связано?
    С тем, что рендеринг элементов не бесплатный.

    Как с этим бороться?
    Инициализировать 5, а не 50. Остальные - по явному запросу пользователя, выгружая при этом из памяти старые ненужные.
    Ответ написан
    Комментировать
  • Как удалить первое слово?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    $str = 'Toster классный сайт';
    $final_str = count(explode(' ',$str,2))>1?explode(' ',$str,2)[1]:'';
    var_dump($final_str);
    Ответ написан
    Комментировать
  • Как компилировать только те файлы, которые используются в проекте gulp?

    delphinpro
    @delphinpro Куратор тега Gulp.js
    frontend developer
    на любой случай жизни.

    ну и зачем это?
    Ставьте в проект только нужные пакеты из того же npm и собирайте их.
    Используйте современный javascript чтобы легко импортировать пакеты.
    Используйте babel для сборки.

    npm install jquery

    import $ from 'jquery';
    
    $('.selector');


    gulp.task('js', function () {
        return gulp.src('src/app.js')
            .pipe(babel())
            .pipe(terser()) // uglify устарел давно
            .pipe(gulp.dest('dist/js')),
    });
    Ответ написан
    Комментировать
  • Как понять блокчейн?

    CityCat4
    @CityCat4
    Дома с переломом ноги
    в чем его преимущества

    Ни в чем. Просто модная хайповая тема. Так же как "облака". Поначалу пытались впихнуть как всегда невпихуемое, кто-то поднял бабла, кто-то прогорел, после того как хайп прошел и стала ясна область применения - сидят тихо и не жужжат, потому что область применения оказалась очень узкой и весьма специфичной...
    Ответ написан
    4 комментария
  • Как сохраненить сессии между rest-запросами в spring boot?

    @Akela_wolf
    Extreme Programmer
    Сессии работают следующим образом: при создании сессии сервер отсылает заголовок Set-Cookie браузеру в котором сохраняет значение идентификатора сессии (JSESSIONID). При последующих запросах браузер посылает "печеньку" обратно серверу и тот, получив идентификатор, может восстановить сессию из своего хранилища. Если "печеньки" заблокированы, то возможно передать jsessionid как query param запроса. Но это уже требует дополнительных телодвижений на стороне клиента.

    Так как вы упоминаете REST, то предположу использование XmlHttpRequest в браузере (напрямую или опосредованно через какую-то библиотеку), который не посылает заголовок Cookie по умолчанию.

    Поэтому вариантом решения может быть отправка идентификатора сессии явным образом как query param с именем jsessionid.

    Однако, использование сессии в REST запросах - в целом не очень хорошая практика, так как REST предполагается быть stateless. А в случае сессии у вас появляется состояние на стороне сервера. Если сессия нужна только для аутентификации клиента, то посмотрите на использование токенов, таких как JWT, которые позволяют решить эту проблему без наличия сессии на стороне сервера.
    Ответ написан
    Комментировать