Задать вопрос
  • Как создать комнату в браузерной игре?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Без бэкенда тут не обойтись. Знаете python? Если нет, стоит подучить. Если да, то знаете ли какой-нибудь фреймворк, типа Flask/Django? Если не знаете, то опять же стоит освоить. Без этого по-нормальному вы ничего не напишите.
    На flask простейший пример будет выглядеть примерно так

    from flask import Flask, redirect, url_for, request
    import random
    import string
    
    app = Flask(__name__)
    
    rooms = {} # здесь будем хранить комнаты и игроков, которые к ним подключились
    
    def generate_room_code(): # функция генерация id комнаты
        return ''.join(random.choices(string.ascii_uppercase, k=4))
    
    @app.route('/')
    def index(): # тут делаем стартовую страницу. Сейчас это зашито прямо в скрипт, но можно возвращать файл
        return '''
        <!doctype html>
        <html>
            <head>
                <title>Новая игра</title>
            </head>
            <body>
                <h1>Добро пожаловать!</h1>
                <a href="/start">Начать новую игру</a>
            </body>
        </html>
        '''
    
    @app.route('/start')
    def start(): # это будет выполняться после нажатия на ссылку "Начать игру"
        room_code = generate_room_code()
        rooms[room_code] = [] # тут добавляем id комнаты. Список пустой, т. к. игроков ещё нет
        return redirect(url_for('waiting_room', room_code=room_code)) # перенаправляем пользователя в комнату
    
    @app.route('/waiting/<room_code>')
    def waiting_room(room_code): # тут делаем комнату.
        if room_code not in rooms:
            return "Not found", 404 # если нет такой комнаты
        return f'''
        <!doctype html>
        <html>
            <head>
                <title>Комната</title>
            </head>
            <body>
                <h1>Комната {room_code}</h1>
                <form action="/join" method="post">
                    <input type="hidden" name="room_code" value="{room_code}">
                    <input type="text" name="player_name" placeholder="Имя">
                    <button type="submit">Присоединиться</button>
                </form>
                <h2>Игроки:</h2>
                <ul>
                    {''.join([f'<li>{player}</li>' for player in rooms[room_code]])}
                </ul>
            </body>
        </html>
        '''
    
    @app.route('/join', methods=['POST'])
    def join_room(): # обрабатываем запрос на присоединение
        room_code = request.form['room_code']
        player_name = request.form['player_name']
        if room_code in rooms:
            # добавляем игрока и перенаправляем его обратно
            rooms[room_code].append(player_name)
            return redirect(url_for('waiting_room', room_code=room_code))
        return "Not found", 404
    
    if __name__ == '__main__':
        app.run(debug=True)
    Это, конечно, просто пример, для того, чтобы вы понимали, как это выглядит

    ИМХО Flask или Bottle (вообще изи) для вас самое лучшее, если вы пока не в теме. Django для новичков не подходит. Ну и конечно, думайте, точно ли вам нужен python
    Ответ написан
    2 комментария
  • Есть что то проще чем php?

    Если без динамики, то Pug - отличный шаблонизатор
    Ответ написан
    Комментировать
  • Что будет с пингом, если между пк и роутером, добавить второй роутер?

    GavriKos
    @GavriKos
    Ну чуть чуть кнчн увеличится пинг - потому что роутеру надо будет как то пакеты обработать. Но скорее всего даже в тестах вы это не заметите. Если кнчн роутер нормальный.
    Ответ написан
    4 комментария
  • Почему сорт не работает?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    я что то не до понимаю?
    Ага

    console.log(obj.sort((a, b) => a.title.localeCompare(b.title)));
    Ответ написан
    1 комментарий
  • Существуют ли эталонно красиво написанные программы?

    @res2001
    Developer, ex-admin
    Код должен решать определенную задачу. Читать абстрактный код без понимания сути решаемой им задачи - бессмысленное занятие. Т.е. вы должны сначала вникнуть в задачу и хотя бы в черне представить как бы вы ее решали. В этом случае, читая код, уже можно оценивать те приемы, которые там применены.
    У меня сложилась такая практика: когда мне требуется использовать библиотеку, в которой реализован нужный мне функционал (т.е. я изначально уже знаю какую задачу должна решать библиотека), я сначала читаю обзорно документацию на нее, потом лезу в исходники и смотрю как оно там все устроено. Некоторые библиотеки после такого анализа отбраковываются, из других можно вынести для себя что-то полезное, но в любом случае начинаешь лучше понимать как работает библиотека.
    На изучение кода толстых библиотек может уйти много времени, поэтому смотрю только какую-то небольшую часть, которая нужна в данном конкретном случае.
    Многие просмотренные мной библиотеки написаны не плохо с моей точки зрения, но на сколько они "эталонно красивы" судить не берусь.
    В целом считаю, что читать чужой код - полезный навык. Но все таки умение программировать самому еще более полезный. Поэтому надо правильно расставить приоритеты.
    Ответ написан
    Комментировать
  • Существуют ли эталонно красиво написанные программы?

    @Everything_is_bad
    Беда в том, что довольно трудно найти хорошо написанный код, который можно было обозреть целиком.
    бесполезное занятие, больше похоже на прокрастинацию, короче пока сам не начнешь понимать какой код "красивый", какой нет (а это только когда сам напишешь кучу кода), толку от рассматривания не будет.
    Ответ написан
    Комментировать
  • Как перезаписать переменную по нажатию кнопки в sass?

    inkShio
    @inkShio
    :root {
      --primary-color: #f9f9f9;
      --text-color: #424242;
    }
    
    :root.dark-mode {
      --primary-color: #161625;
      --text-color: #e1e1ff;
    }
    
    body {
      background: var(--primary-color);
      color: var(--text-color);
    }

    Ну и на js напишешь, что бы при нажатии на кнопку добавлялся класс dark-mode к html.
    Ответ написан
    Комментировать
  • Как теперь запустить Linux на внешнем SSD?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Винда при переустановке сбросила данные в EFI - она так постоянно делает. Можно шаманить с виндовыми EFI-менеджерами, но проще загрузиться с любого дистриба линуха и прогнать grub-install, указывая нужные устройства, даже если граб стоит уже. Главное, что сделает grub-install - восстановит запись в EFI, указывающую на него. Можно, конечно и вручную через efibootmgr пошаманить, но grub-install проще.
    Ответ написан
    3 комментария
  • Как теперь запустить Linux на внешнем SSD?

    @rPman
    Если используется EFI то по стандарту разработчиков материнских плат не обязали давать такую возможность из биоса, т.е. нужно прописать в биосе (это можно сделать из linux с помощью efibootmgr) какая еще ОС у тебя на машине доступна.

    Исключение сделали для removable drives но трактовать что есть что оставили за производителем материнки (обычно это работает только для usb flash и cdrom, но не для внешних sata/nvme контроллеров).

    Все автоматически может сделать grub-install, достаточно загрузиться с liveusb любой linux (настоятельно рекомендую тот же что установлен, как минимум аритектура та же), смонтировать корневую и boot в какой-нибудь каталог, например /mnt (если там отдельно есть /boot и /boot/efi то их тоже смонтировать соответственно в /mnt/boot и /mnt/boot/efi), удостовериться что sdX это диск с linux и сделать
    grub-install /dev/sdX --root-directory=/mnt

    p.s. для legacy mbr режима достаточно было бы выбрать диск из BIOS но многие контроллеры в биосе не доступны, потому что драйверов нет.

    p.p.s. совмещать загрузчик linux и windows на одном диске чревато его удалением (inux загрузчика) windows при очередном обновлении, это уже происходило, поэтому если с драйверами проблема, то устанавливают grub на маленький носитель, с которого загрузка работает, типа миниатюрный usb flash или карту памяти (например многие ноутбуки имеют картридер)
    Ответ написан
    2 комментария
  • Из-за чего программа C++ на amd работает быстрее чем на intel?

    @Zerg89
    Есть два варианта, то что вы не использовали в коде не значит что компилятор не использовал оптимизацию под платформу по которую был собран код, для чистоты эксперимента пробуйте пересобрать проект с процом под которым будете тестировать
    Второй вариант до банального простой, частота процессора в однопотоке при турбо-бусте процы амд в большинстве случев имеют большую частоту на ядро
    Ps и ещё одно вспомнить о p и e ядрах в интелле да и арм(м1,м2) тоже вроде гибриды с разными ядрами в проце
    Ответ написан
    Комментировать
  • Что лучше юзать для восстановления системы BTRFS или RSYNC на Linux?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Ох, это "импортозамещение".
    Вы неправильно подходите к "поставленной задаче"!
    Ее нужно исполнять, думать тут нечего. Ставьте! Разберетесь потом!

    Я бы предложил вместо RedOS ставить DeepStupidOS....

    Ну а теперь по делу.
    Чтобы что-то восстановить нужно сначала подумать - как это делать (стоп! думать?! отставить!).
    А делать это можно разными способами:
    - первичной установкой ОС, а затем накатыванием бекапа
    - полным восстановлением системы из бекапов
    - восстановлением системы из снапшота файловой системы...

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

    Я рекомендую "первичной установкой ОС, а затем накатыванием бекапа" с использованием restic/borg/bareos/urbackup (далее везде). Конкретная система бекапов подбирается из кучи факторов и умения работать с конкретной из них (даже clonezilla, которая тоже очень хороша). Мне нравятся restic/borg/urbackup, но и bacula себя отлично показывает на парке серверов в ~100 штук.

    ЗЫ. Сколько же анекдотов хороших на тему "поставленной задачи" вспомнилось...
    "копать отсюда и до заката", "поезд! стой! раз, два", "думать не нужно, за нас подумали"....

    PSS. Кстати, подозреваю, что бекапами и восстановлением Вы совсем никогда-никогда не занимались. Ибо, что в линуксах, что в юниксах, что в уиндоуз - все задачи решаются примерно одинаково и очень похожими инструментами.
    Ответ написан
    2 комментария
  • В чем разница ядер Линукс?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    В патчах производителя дистрибов
    Ответ написан
    Комментировать
  • Как удалить таблицу из базы postgresql, подставляя имя из переменной?

    vabka
    @vabka Куратор тега Rust
    Имя таблицы как параметр нельзя передать.
    Используй format! или concat!
    Ответ написан
    3 комментария
  • В какую сторону развивается Vue и есть ли ему современные альтернативы?

    yarkov
    @yarkov Куратор тега Vue.js
    Помог ответ? Отметь решением.
    Что вообще с фреймворком? Он развивается?

    Вы ведь даже не попытались гуглить. Не ходили в github проекта.
    Если да то в какую сторону и что слышно про Vue 4?

    В лучшую. Зачем вам 4? Разберитесь пока с тем что есть.
    Про React знаю, но интересуют именно Vue и ему подобные фреймворки

    Возьмите React )) Ну а подобные Vue... На слуху наверное только Svelte.
    Ответ написан
    Комментировать
  • Почему питание домашних роутеров — 12 В?

    GavriKos
    @GavriKos
    Невольно думается, что это заговор производителей: чтобы горели, а мы шли новые покупать.

    Ну я вот на днях сменил роутер. Предыдущий отпахал 10 лет - и пахал бы дальше, ничего не сгорело. И это при том что у него адаптер питания на 24 вольта, а допустимое входное - 10-28. Так что тут скорее наоборот страхуется производитель, чтобы сделать нормальное питание внутри для себя, независимо качества БП (их скорее всего делает подрядчик - они далеко не всегда фирменные). А чтобы гарантировать норму внутри - на вход надо таки повыше подать.

    А чего вы про ноуты такой же вопрос не задаете? Там БП тоже не 5 вольт далеко выдают.
    Ответ написан
    12 комментариев
  • Хочу начать изучать Rust, стоит ли начинать с официальной книги?

    @historydev
    Редактирую файлы с непонятными расширениями
    Да, стоит, это великолепное издание проведёт тебя так гладко и приятно по языку, что после ты не захочешь смотреть на другие)

    Вдобавок многие популярные библиотеки пишут обучалки в формате Rust Book.
    Ответ написан
    3 комментария
  • Почему typescript не проверяет типы при использовании spread-оператора?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Потому что так миръ устроен. ts ругается на лишние свойства, только если ты передаешь в типизированную переменную объектный литерал с этими самыми лишними свойствами (тема раскрыта здесь). Главная задача ts при проверке объектов - ругаться, если чего-то не хватает или что-то не соответствует по типу.
    Ответ написан
    2 комментария
  • Что будет если сделать 2 одинаковых домена в разных зонах?

    delphinpro
    @delphinpro
    frontend developer
    Домен com.ru принадлежит регистратору. Вы не сможете создать на нем поддомен.
    И именно потому что он принадлежит регистратору, этот регистратор может вам предложить домены в зоне .com.ru
    Ответ написан
    5 комментариев
  • Что будет если сделать 2 одинаковых домена в разных зонах?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Куда укажешь - туда и будет ссылаться. Но habr.com.ru (как и любой домен 3-го уровня) можно "купить" только у администратора com.ru.
    Ответ написан
    Комментировать
  • Выбрать Vmware или VirtualBox на Windows для разработки?

    @SunTechnik
    Знатоки меня поправят, но, насколько мне известно, нет легального способа запуска MacOS на железе не от Apple.
    Поэтому Вам предстоит тяжкий путь путешественника по граблям..

    Вот один из примеров:
    https://habr.com/ru/articles/761408/
    Ответ написан
    1 комментарий