Задать вопрос
  • Стоит ли идти фронтом в гос. организацию?

    Sanes
    @Sanes
    Иди конечно. Это новый опыт. Для фриланса будет полезно поработать с бюрократией.
    Ответ написан
    Комментировать
  • Как в Ansible выполнить замену или вставку текст в файл?

    karabanov
    @karabanov
    Системный администратор
    Я бы сделал шаблон конфига и из него уже контролируемо формировал конечный конфиг.
    Ответ написан
    4 комментария
  • Блокирует ли процесс построения индексов таблицу?

    2ord
    @2ord

    UPDATE (SET a = 'foo' where field и LIKE '%pattern%')
    Нужно было перед командой добавить "EXPLAIN ANALYSE ", тогда можно было узнать план запроса, не выполняя его.
    3. Почему UPDATE не связанный с этим полем так тормозит?
    См. выше.

    Особенно когда
    Есть таблица на 100 млн записей.

    Кроме того, что за индекс был добавлен на поле, по которому выполняется LIKE? Если B-tree, Hash, то это имеет нулевую ценность для ускорения запроса. По этому полю возможно нужен GIN индекс (pg_trgm). Или даже необходимо перепроектировать таблицы, вынеся это поле, разбив на множество записей и связью N:M. Мы не знаем что за данные в том поле.

    Для экспериментов лучше создавать ограниченный набор данных, приближенный к продакшн и тестировать на нем, вместо на 100М записей.
    Ответ написан
    6 комментариев
  • Подойдет ли ms sql express-версия для создания бд где планируется около миллиона записей?

    quality
    @quality
    admin, supp: windows,linux; ubiquiti,mikrotik.
    Добрый день. Установите локально express редакцию, создайте таблицу и поля, внесите 1 запись (+- что планируется вносить) и посмотрите запросом размер строки. И методом простой математики, узнаете ответ на ваш вопрос.
    Ответ написан
    Комментировать
  • Что конкретно нужно знать про Django для начинающего разработчика?

    DollyPapper
    @DollyPapper
    На самом деле - всё что угодно. "Ты никогда не будешь готов к работе", нужно постоянно учиться.
    Но это не ответ на вопрос, точка входа должна быть у всего. И везде она разная. То есть никогда, не знаешь где тебе что может пригодится. Если более менее усреднить, могу выкатить такой список навыков с которыми можно идти на работу.

    Общие:
    • Знать как работает DNS в общих чертах, знать что такое файл hosts и зачем он нужен.
    • HTTP протокол. Знать его формат, знать статус коды
    • Быть уверенным пользователем Linux терминала. Знать как устроена файловая система линукса, зачем нужны все эти директории. Уметь пользоваться основными командами (cd, grep, ssh, lsof)<- это прям самый минимум, лучше больше. Значить что такое перенаправление ввода вывода (<,>,|)
    • Не плохо бы минимально уметь настроить Nginx. Вероятно вам не придется это делать будучи джуном, но знать как проиходит полный процесс обработки запроса как мне кажется очень полезно.
    • Мочь настроить SSL на nginx. Опять же скорее всего как джун вы этого делать не будете, но кто знает, разок попробовать чтобы просто понять.
    • Docker. Очень часто используется, советую выучить.

    Backend
    • Собственно сам питон и джанго на высоком уровне, это ваш самый основной рабочий инструмент
    • Django ORM и чистый SQL. Опять же на высоком уровне, с БД придется работать постоянно.
    • Если есть время - почитать про проектирование БД. Нормализация БД и вот это вот всё.
    • Понимать что такое авторизация и аутентификация

    FrontEnd
    Возможно вам не придется писать фронт, у вас будет для этого отдельные люди, но вероятность того что придется, она не нулевая. Зная какой нибудь JQuery ну или чистый JS вы повысите свой шанс найти работу. Ну про CSS + HTML я молчу, это даже не обсуждается, знать нужно.

    Отдельно хотел бы упомянуть по само написание кода. Хорошо бы понимать SOLID, DRY, KISS. Ну и конечно ООП, это я даже в списки не включал, это само собой разумеющиеся вещи.

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

    Как это учить?

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

    @Konf
    Редактирую ответы на 2 + 2 по 4 раза
    tl;dr Распределяет события клиент <--> сервер

    Класс создаёт websocket сервер по адресу
    process.env.REGISTRY_SERVER || 'ws://localhost:9977'
    и обрабатывает все входящие сообщения следующим образом: JSON.parse(message) --> const { event, payload } = message, что значит что входящие сообщения (от клиента) должны иметь формат { event: "someEventName", payload: { ... } }. Потом это сообщение уже в виде объекта идёт в какой-то обработчик событий, который, скорее всего, распределяет этот объект по функциям-подписчикам (listeners), объявленным в других файлах. Эти функции там что-то делают с этими сообщениями, и вызывают callback sendEvent с какими-то новыми event и payload.

    То есть, если это игра, то от клиента может прийти что-то такое:
    { event: "userInput", payload: { type: "keyPress", value: "f3" } }
    Затем это через router будет передано в какую-то функцию, которая, например, выяснит что персонаж сейчас стоит на клетке, которая при нажатии ф3 должна телепортировать игрока. Ещё какая-нибудь функция сделает это, и, в конце концов, будет вызван callback sendEvent, который отправит на клиент игрока сообщение
    { event: "characterMove", payload: { x: 123, y: 532 } }
    Ответ написан
    1 комментарий
  • Ошибка sqlite3.OperationalError: no such column: cash, как решить?

    @o5a
    Значит в таблице нет такого поля cash.
    По всей видимости таблицу создавали изначально с другим составом полей, и она уже есть в базе (без cash), поэтому CREATE IF NOT EXISTS пропускается.

    Или удалите таблицу из базы, если данные не нужны: "DROP TABLE users"

    Или добавьте поле отдельно: "ALTER TABLE users ADD cash BIGINT".
    Ответ написан
    1 комментарий
  • Как настроить автоинкрементируемый столбец, чтобы при добавлении новых строк не появлялись пропуски?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Ок, представим что вы настроили подобный механизм (хотя очевидно что это сделано не просто так), и теперь у вас есть предположим пользователи с номерами 10 и 11. У каждого из них есть некоторые данные, которые привязаны к этому пользователю по id. Теперь мы удаляем пользователя под номером 10, а потом создаем нового, который займет это место. Теперь владельцем всех данных удаленного пользователя будет новый пользователь, который как бы не должен иметь к ним доступа.

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

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Можно ли сделать так, чтобы запрос выполнялся дольше, но меньше загружал CPU -- может есть какие-то способы понизить приоритетность выполнения?

    Обычный nice. Процессная же модель, никаких проблем понизить приоритет конкретного процесса средствами самой ОС.

    Есть ли встроенные механизмы кэшированая, которым можно сказать, что для запроса Х нужно отдавать данные из кэша при вызове его чаще чем N минут\часов?

    Нет, кеша запросов нет. И не будет.

    ситуация когда с БД нужно собирать некоторую статистику и при этом сделать так, чтобы система не сильно тормозила

    Не смешивать OLAP и OLTP вообще. Если база важная, то у неё будет hot standby. Там статистику и считать.
    Ответ написан
    Комментировать
  • Техническое собеседование Python?

    @dmshar
    Хочу вас расстроить. Человека не умеющего сначала искать ответ самостоятельно - хотя-бы на том-же ресурсе, на котором он задает вопрос, хотя-бы тех ответов, которые дали менее чем за две недели до вас - на работу нынче не берут. Уж больно много лениво-желающих, надо отобрать тех, кто имеет хоть зачатки самостоятельного мышления.
    Вот вам ответ. Изучайте:
    Как подготовиться по алгоритмам к собеседованию(junior)?
    Ответ написан
    Комментировать
  • Как сделать умножение в Select?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT CASE valuta WHEN 1 THEN price
                       WHEN 0 THEN price * 73
                       ELSE NULL 
                       END AS price_in_rub, 
           ...
    FROM ...
    WHERE ...
    Ответ написан
    1 комментарий
  • Как правильно делать JOIN таблиц?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Есть ли разница джоинов этих двух строк, с точки зрения нагрузки на БД?

    Оба запроса - INNER JOIN. Если не используется STRAIGHT_JOIN, то сервер гарантированно построит для обоих запросов один и тот же план выполнения.

    Более того, если Вы почитаете внимательно, как именно сервер выполняет и оптимизирует запросы, то узнаете, что сервер фактически оба этих запроса приводит к картезианскому произведению с отбором. Вернее, препроцессинг выглядит так, словно сервер выполняет такое приведение.
    Ответ написан
    Комментировать
  • Как комбинировать работу с протоколами websocket и http?

    @kr_ilya
    Если коротко
    http сервер запускаешь на одном порту.
    socket.io сервер запускаешь на другом порту.
    Потом через nginx например, проксируешь их на разные адреса

    Например
    server.js

    //http
    const express = require('express');
    const server = require('http')
    var app = express();
    var server = server.Server(app);
    server.listen(3000);
    
    //socket
    Socket.io = require('socket.io')(3001, { path: '/', });


    Секция server конфига nginx

    # Для стандартных пост гет запросов (запросы, естественно, будут на site/api/)
    location /api/ {
        expires $expires;
    
        proxy_redirect                      off;
        proxy_set_header Host               $host;
        proxy_set_header X-Real-IP          $remote_addr;
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_read_timeout          30m;
        proxy_connect_timeout       30m;
        send_timeout                30m;
        proxy_pass                          http://127.0.0.1:3000/; # set the adress of the Node.js instance here
    }
    
    # Для сокетов
    location /socket/ {
    
        expires $expires;
    
        proxy_redirect                      off;
        proxy_set_header Host               $host;
        proxy_set_header X-Real-IP          $remote_addr;
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_set_header                    Upgrade $http_upgrade; #для сокетов
        proxy_set_header                    Connection "upgrade"; #для сокетов
        proxy_http_version 1.1;
        proxy_read_timeout          30m;
        proxy_connect_timeout       30m;
        send_timeout                30m;
        proxy_pass                          http://127.0.0.1:3001; # set the adress of the Node.js instance here
        
    
        
        # proxy_ssl_server_name on;
    }
    Ответ написан
    Комментировать
  • Как удалить содержимое БД Mysql?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Самое простое - сделать бэкап только структуры, без данных (mysqldump --no-data, https://dev.mysql.com/doc/refman/8.0/en/mysqldump....), удалить БД, восстановить. Само собой, не забыть забэкапить процедуры/триггеры/прочее.
    Ответ написан
    Комментировать
  • Почему мой генератор не работает?

    402d
    @402d
    начинал с бейсика на УКНЦ в 1988
    str_replace — Заменяет все вхождения строки поиска на строку замены

    легче всего переделать так.
    по всей длине маски
    взять текущий символ.
    если он Х то к результату добавить случайный символ иначе текущий
    Ответ написан
    3 комментария
  • Как засунуть переменные из include файла в класс?

    @kot999
    Backend software engineer
    тут изначально очень не правильный подход. не нужно делать "дефолтную конфигурацию" через глобальные переменные.
    class DbConnection
    {
        private string $userName;
        private string $password;
        private string $dbname;
    
        public function __construct(string $userName, string $password, string $dbName)
        {
            $this->userName = $userName;
            $this->password = $password;
            $this->dbname = $dbName;
        }
    }
    
    
    class AuthController
    {
        private DbConnection $dbConnection;
    
        public function __construct(DbConnection $connection)
        {
            $this->dbConnection = $connection;
        }
    }
    
    $dbSettings = include('dbconfig.php');
    $connection = new DbConnection($dbSettings['login'], $dbSettings['password'], $dbSettings['dbName'] );
    $controller = new AuthController($connection);


    а в файле dbconfig.php

    return [
    'login'=>'myLogin',
    'password'=>'myPassword',
    'dbName'=>'myDbName'
    ];
    Ответ написан
    3 комментария
  • Ошибка с foreign key?

    usdglander
    @usdglander Куратор тега PHP
    Yipee-ki-yay
    Ну ловите его и обрабатывайте как угодно. Через try...catch.
    Ответ написан
    Комментировать
  • Есть ли кто сможет проверить php код на ошибки?

    DevMan
    @DevMan
    Д - дебаг. читайте логи/включите вывод ошибок.

    и дело не в нежелании помочь, дело в невозможности учесть ваше окружение и скомпилить код в уме. разве что гадать.
    Ответ написан
    1 комментарий
  • Почему бы вместо абстрактного класса не делать обычный, но с пустыми методами?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Абстрактный класс нужен для того, чтобы не было возможности создавать его экземпляры, а только его классов-наследников.
    Простой пример. Пусть у нас будет абстрактный класс Фигура с методом Нарисовать; и есть его классы-наследники Круг и Квадрат.
    Так вот. Экземпляры классов Круг и Квадрат мы имеем право создавать, а вот экземпляр Фигуры создавать не имеем права, т.к. это не имеет физического смысла. И уж тем более мы никак не можем реализовать метод Нарисовать у Фигуры. Поэтому и сделан такой запрет на абстрактные классы.
    Это необходимо, чтобы код был надёжным и защищённым от кривых рук других программистов
    Ответ написан
    5 комментариев
  • Как сделать запись в sqlite3 целым числом, а не 1е+1?

    Насколько больше число? С числами лучше конкретнее.
    Максимальное число, которое можно сохранить в integer sqlite (8 байт) - 9,223,372,036,854,775,807.
    Если ваши числа больше, то полагаю, придется хранить это число как строку или блоб.
    Ответ написан
    1 комментарий