• С чего начать новичку в изучении c# для gamedev?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Для C# (пишется с большой буквы) установи cреду разработки Visual Studio Community (ссылка).

    В первую очередь тебе нужно выучить C#. Чтобы у тебя дошло до автоматизма написание кода. Первое время ты будешь сильно подвисать на каждой мелочи. Простейшие ошибки будут ставить в тупик. Наверняка, сюда задавать вопросы, что нормально. Это дело не быстрое, невозможно с полного нуля за неделю всё выучить, уйдёт от полугода. И нужно на это будет тратить много времени, желательно даже каждый день. Без знания языка и умения писать в стиле ООП простые приложения я уверен, что в Unity делать нечего.

    Рекомендую создать Решение (Solution) на C# в Visual Studio и в него добавлять проекты по темам из книги.
    Пример проектов в решении:
    Изучение C# (.sln)
    1. Переменные, циклы (.csproj)
    2. Классы (.csproj)
    3. Наследование (.csproj)
    4. Делегаты и события (.csproj)
    Только проекты называй по-английски.
    Прочитал главу, сделал примеры из книги, написал везде комментарии с пояснениями. Делай так, чтобы потом можно было вернуться к этим проектам и быстро вспомнить, что забылось. После того как ты будешь много времени тратить на обучение и чтение книги, у тебя всё лучше и лучше будут запоминаться детали языка. Именно за счёт траты большого кол-ва времени и обучения на длительном промежутке времени всё и выучится само. Я не зубрил ничего почти.

    Очень хорошее объяснение по C# здесь. Сразу скажу, уроки очень старые, но очень хорошие (там про платформу .NET Framework, но ничего нет про .NET Core, а теперь уже просто .NET (начиная с 5) и многого другого). Можно посмотреть эти уроки, после них начать читать книгу по C#, пусть из уроков много будет знакомо, но, скорее всего, в книге ты узнаешь новые детали и учить будет легче.

    Ещё такой курс более современный, его не смотрел.

    Кстати, чтобы не терять интерес, ты конечно можешь установить себе Unity, найти уроки по созданию 2D платформера, даже начать делать по урокам первую игру, но я тебе советую периодически как посидел над Unity возвращаться к книге и читать её дальше и так пока всю не прочитаешь. Я так и учил C#. Писал приложение, так как именно это было интересно, и периодически возвращался к книге.

    Алгоритмы. Можешь почитать хотя бы что-то простое для начала. Например,
    Алгоритмы. Вводный курс | Кормен Томас Х.

    https://qna.habr.com/q/848533#answer_1745621

    Книги есть такие:
    C# 9.0. Справочник. Полное описание языка (ссылка)
    Язык программирования C# 7 и платформы .NET и .NET Core | Джепикс Филипп, Троелсен Эндрю (ссылка)

    Возможно даже
    C# для чайников | Мюллер Джон Поль, Семпф Билл (здесь C# 7.0). ISBN: 978-5-907144-43-9
    Ответ написан
    7 комментариев
  • Как правильно составить SQL запрос?

    @eandr_67
    web-программист (*AMP, Go, JavaScript, вёрстка).
    Если надо считать отдельно для каждого значения game:
    SELECT COUNT(DISTINCT game_id) AS count, game FROM bets GROUP BY game

    Если же нужно просто посчитать кол-во уникальных game_id по всей таблице:
    SELECT COUNT(DISTINCT game_id) AS count FROM bets
    Ответ написан
    5 комментариев
  • Django, хочу добавить в базу данных 2000 столбцов?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Рано вам ещё за Django браться, вы явно не знаете Python.
    Ответ написан
    2 комментария
  • Как найти гласные и согласные буквы в словах в файле на Python?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    import re
    
    def vowelsMoreConsonats(word):
    	count_vowels = len(re.findall(r'[ауоыиэяюёе]', word, re.IGNORECASE))
    	count_consonants = len(re.findall(r'[бвгджзйклмнпрстфхцчшщ]', word, re.IGNORECASE))
    
    	if count_vowels > count_consonants:
    		return True
    
    	return False
    
    with open('file_1.txt') as file:
    	words = file.read().split()
    
    for word in words:
    	print(f'{word} {vowelsMoreConsonats(word)}')

    Output
    Есть False
    некий False
    file_1 False
    и True
    file_2. False
    В False
    file_1 False
    я True
    вручную False
    ввожу False
    какой-нибудь False
    текст False
    с False
    пробелами False
    и True
    знаками False
    препинания. False
    Нужно False
    переписать False
    текст False
    из False
    file_1 False
    в False
    file_2 False
    удалив False
    из False
    него False
    слова, False
    в False
    которых False
    количество False
    согласных False
    букв False
    меньше, False
    чем False
    количество False
    гласных. False
    Как False
    мне False
    максимально False
    грамотно False
    определить False
    что False
    в False
    слове False
    больше False
    гласных, False
    чем False
    согласных False
    букв? False
    Ответ написан
    2 комментария
  • Как можно закрыть сайт от роскомнадзора?

    @k2lhu
    Оставьте пожалуйста свой телеграмм аккаунт - я вам напишу.
    Ответ написан
    5 комментариев
  • Что лучше: 1 большой или 2 монитора поменьше?

    3ybHa9_Fe9
    @3ybHa9_Fe9
    я бы не сказал что на 27 играть приятней, головой приходится вертеть
    Ответ написан
    Комментировать
  • Как можно укоротить код python?

    ramzis
    @ramzis
    FullStackOverflow
    Можно сделать так

    def view():
        pass
    def viewAll():
        pass
    def num():
        pass
    
    def command_check(command):
        com = {'view':view,'viewAll':viewAll,'num':num}
        try:
            com[command]()
        except:
            print("Ошибка. Несуществующая команда.")
        
    command_check('view')
    Ответ написан
    1 комментарий
  • Дан рост трех человек. Необходимо вывести сообщение "По росту" или "Не по росту". Возможно ли решить данное задание без ифов?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Ну раз пошла такая пьянка, тогда можно 3 значения занести в список. Потом отсортировать список и сравнить его с первым списком. Если совпадают, получим True, если нет - False.
    h1 = int(44)
    h2 = int(45)
    h3 = int(46)
    
    my_dict = {True:'По росту',
    			False:'Не по росту!'}
    
    my_list = [h1,h2,h3]
    
    print(my_dict.get(my_list == sorted(my_list)))
    
    >>> По росту

    Можно код сократить, но так более понятно.
    Ответ написан
    1 комментарий
  • Дан рост трех человек. Необходимо вывести сообщение "По росту" или "Не по росту". Возможно ли решить данное задание без ифов?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    >>> def check(arr):
    ...    while arr == sorted(arr):
    ...        print('по росту')
    ...        return
    ...    print('не по росту')
    ... 
    >>> check([1,2,3])
    по росту
    >>> check([2,1,3])
    не по росту
    Ответ написан
    Комментировать
  • Как сделать парсер на django с занисением фильмов в бд?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    На Django никак. Django - это web-фреймворк, предназначенный для создания web-сайтов и web-приложений, а не парсеров. Парсер можно написать на Python, а потом интегрировать с django-приложением. Для этого, естественно, надо будет выучить сам Python, какую-нибудь библиотеку для http-запросов, какую-нибудь библиотеку для разбора полученных данных и желательно понимать сами механизмы функционирования сетей и http-протокола в частности. Когда всё это освоите и у вас возникнут конкретные проблемы, тогда и приносите их сюда.

    P.S. Учитесь по учебникам, курсы до добра не доведут.
    Ответ написан
    3 комментария
  • Как узнать что занимает место на диске centos?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Выполняем:
    du -h -d 1 /
    Находим директорию там где больше всего размер выведет
    Затем
    du -h -d 1 /<интересующая директория>
    и выполняем эту команду далее, спускаясь внутрь директорий, пока не найдете требуемое
    Ответ написан
  • Как правильно настроить uwsgi+nginx?

    @azrocketa
    вы можете запустить uwsgi как демон на порту, и не надо будет выдавать права на сокет и добавлять пользователя в группы.

    если проектов планируется много и все подразными пользователями, то наверно лучше 666 на сокет

    Еще как вариант запускать проекты под www-data и при деплое через ACL и setguid менять выставлять нужную группу на файлы

    Вариантов много, выбирайте любой который больше понравится.

    Если проектов больше 5 я бы засунул всё в докеры и через nginx проксировал трафик по разным проектам
    Ответ написан
    Комментировать
  • В каких случаях верстать кнопку через тэг 'a', в каких через тэг 'button'?

    iiiBird
    @iiiBird Куратор тега Вёрстка
    Пока ты спишь - твой конкурент совершенствуется
    если именно рассматривать со стороны верстальщика - верстай так, чтобы стили нормально работали как для <a> так и для <button>. не прогадаешь. бэкэндеры разные бывают.
    Ответ написан
    Комментировать
  • Как правильно настроить uwsgi+nginx?

    Просто пользователь www-data пошел с apache2 и уже по дефакту стал стандартом. а так по факту можно любой пользователь, главное чтобы он был одинаковый
    Ответ написан
    1 комментарий
  • Как лучше размещать сайты на сервере?

    @metajiji
    В идеале все в docker. Сервер базы так и быть, можно пошарить, чтобы сэкономить ресурсы. А вот сами базы и юзеров конечно же отдельные.
    Если это pho-fpm, то каждый сайт это отдельный пул, для nginx отдельный конфиг, где описан virt server. Для апача так же, но можно и усложнить тем(считай укуриться), что спавнить воркеров от отдельных системных юзеров(если не в докере).

    И ещё php.ini не стоит трогать вообще, разве что модули добавлять. Остальные php опции описывать для каждого сайта персонально в конфиге fpm пула или виртхосте апача, в зависимости, что там у вас.
    Ответ написан
  • Что такое инверсия зависимостей в python?

    Ranc58
    @Ranc58
    Backend python developer
    По сути - как и везде. Пример- У бизнесс логики не должно быть зависимостей от конкретных реализаций. Сегодня у вас все хранится в постгрес а завтра в монге. Инверсия зависимостей позволяет более менее безболезненно совершить такой переезд, так как слой бизнесс логики понятия не имеет где вы храните данные. Ниже накидал грубый но вроде понятный кусок кода. Есть некая сущность блог, к которой можно добавлять пользователей и смотреть их. Блог должен откуда то тянуть данные и где то хранить их. Мы создаем некий интерфейс DBInterface ,который имеет стандартные методы добавить/удалить данные. Далее создаем класс SQLdb который реализует этот интерфейс.

    В самом классе блога мы реализуем функции получения/добавления пользователей без привязки к конкретной системе хранения: просто создаем экземпляр класса SQLdb и экземпляр класса Blog , передавая туда sqldb. Когда мы захотим переехать на монгу - нам не надо будет трогать класс блога. Мы всего лишь реализуем класс Mongodb для новой базы и будем опрокидывать его в блог вместо sqldb. Итог - блог не зависит от системы хранения вообще.
    Пример сильно упрощен и утрирован, но для понимания как оно работает думаю сойдет)

    from abc import ABC, abstractmethod
    import random
    
    
    class DBInterface(ABC):
    
        @abstractmethod
        def insert(self, data):
            pass
    
        @abstractmethod
        def get(self, id):
            pass
    
    
    class SQLdb(DBInterface):
    
        def insert(self, data):
            print(f"inserted {data} from mysql")
            return random.randint(0, 100)
    
        def get(self, id):
            print(f"get user {id} data from mysql")
            return {'id': id, "data": "some_data"}
    
    
    class Mongodb(DBInterface):
    
        def insert(self, data):
            print(f"inserted {data} from mongo")
            return random.randint(0, 100)
    
        def get(self, id):
            print(f"get user {id} data from mongo")
            return {'id': id, "data": "some_data"}
    
    
    class Blog:
    
        def __init__(self, db, blog_id):
            self.db = db
            self.blog_id = blog_id
    
        def add_user(self, name):
            self.db.insert(name)
    
        def get_users(self):
            return self.db.get(self.blog_id)
    
    
    if __name__ == '__main__':
        sql_db = SQLdb()
        mongo_db = Mongodb()
    
        blog_with_sql = Blog(db=sql_db, blog_id=1)
        blog_with_sql.add_user("test") # Выведет inserted test from mysql
    
        blog_with_mongo = Blog(db=mongo_db, blog_id=1)
        blog_with_mongo.add_user("test") # Выведет inserted test from mongo
    Ответ написан
    2 комментария
  • Как лучше размещать сайты на сервере?

    @YMakeev
    Поставь себе на сервер VestaCP. Там уже все реализовано и даже по фен-шуй...
    Пользователи раздельно, базы раздельно. При желании можно и несколько сайтов одному пользователю добавить, но не стоит.

    WStanley , Если хочешь "мосчь новой БД." - тогда тебе в докер.
    Создавай проекты Стеками (несколько контейнеров логически объединенных), используй Траефик [https://containo.us/traefik/], для маршрутизации трафика. Тогда все будет просто и логично :)
    Ответ написан
  • Как лучше размещать сайты на сервере?

    Sanes
    @Sanes
    Один сай = один пользователь. Нечего им шариться между собой.
    Соответственно скрипты должны запускаться от имени владельца файлов.
    А то у нас модно настраивать LAMP по заветам какого-нибудь Digital Ocean.
    Где Apache mpm-prefork + mod_php
    Ответ написан
    Комментировать
  • Как лучше размещать сайты на сервере?

    solotony
    @solotony
    покоряю пик Балмера
    максимально изолируй сайты друг от друга.
    антивирус (хотя бы сканер айболит) нужен

    потому что если один сайт взломают - это неприятность, а когда сразу 100500 взломают - это жo..а
    Ответ написан
    Комментировать