• Как удалить merge commit из проекта?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Если капитан любит линейную историю то легко можно избавиться от коммита слияния:

    git rebase origin/master databаse_branch

    Эта команда пересадит ветку databаse_branch на вершину актуальной ветки database, которая судя по всему связана с веткой master в вышестоящем репозитории origin. Коммит слияния исчезнет.

    Затем придётся принудительно обновить в вышестоящем репозитории эту ветку:

    git push --force

    И если кто-то её уже скачивал к себе, то попросить их обновиться через:

    git pull databаse_branch --rebase

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

    ScriptKiddo
    @ScriptKiddo
    Если стоит вопрос оптимизации, то можно использовать numpy: разница на порядок
    Naive  13.342852999999998 seconds
    Optimized  0.22429799999999744 seconds
    Unique: [ True] Counts: [25000000]


    Source

    import time
    from time import process_time
    
    import numpy
    
    matrix = []
    
    
    def naive():
        from time import process_time
    
        def create_matrix(n):
            res_list = []
            for i_ind in range(n):
                res_list.append(list())
                for j_ind in range(n):
                    res_list[i_ind].append(0)
    
            return res_list
    
        def get_counting_func(q_vector, v_vector):
            q_matrix = [[*q_vector] for i in range(len(q_vector))]
            v_matrix = [[i for j in range(len(v_vector))] for i in v_vector]
    
            def t_func(i_start, i_len, j_start, j_len):
                global matrix
                for i in range(i_start, i_start + i_len):
                    for j in range(j_start, j_start + j_len):
                        matrix[i][j] = ((q_matrix[i][j]) ** 2 + (v_matrix[i][j]) ** 2) ** 0.5
    
            return t_func
    
        n_el = 5000
        global matrix
        matrix = create_matrix(n_el)
    
        q_vect = [(i + 11) ** 2 for i in range(n_el)]
        p_vect = [(i * 3 + 13) * 17 for i in range(n_el)]
    
        counting_func = get_counting_func(q_vect, p_vect)
    
        start_time = process_time()
    
        counting_func(0, n_el, 0, n_el)
    
        print('Naive ', process_time() - start_time, "seconds")
        return matrix
    
    
    def optimized():
        start_time = process_time()
    
        n_el = 5000
        res = numpy.fromfunction(lambda i, j: (((i * 3 + 13) * 17) ** 2 + (j + 11) ** 4) ** 0.5, (n_el, n_el)
                                 , dtype=numpy.float32)
    
        print('Optimized ', process_time() - start_time, "seconds")
    
        return res
    
    if __name__ == '__main__':
        first = naive()
        second = optimized()
    
        unique, counts = numpy.unique(numpy.isclose(second, numpy.array(first)), return_counts=True)
        print(f'Unique: {unique} Counts: {counts}')

    Ответ написан
    3 комментария
  • Как найти исходный код модулей python?

    niremizov
    @niremizov
    CEO, предприниматель
    Комментировать
  • Как правильно написать TCP клиент-серверное приложение, чтобы оно могло работать не только в локальной сети?

    petermzg
    @petermzg
    Самый лучший программист
    "У меня статический ip, порты я открыл и на своём компьютере и на компьютере с клиентом."
    статический ip у вас явно на роутере, скорее всего требуется с него проброс порта на ваш компьютер сделать.
    На компьютере с клиентом порт открывать необходимости нет.
    Ответ написан
    1 комментарий
  • Какие технологии надо изучить C# backend разработчику?

    1. SQL - обязательно (в плане понимания, как вообще реляционные БД работают)
    2. HTTP - чтобы понимать вообще, как оно работает (чтобы можно было ответить на вопрос "почему нельзя поменять код ответа после отправки заголовков")
    3. asp net (core), как самый популярный фреймворк для бэкенда в C# (достаточно базового понимания. Не нужно сильно глубоко лезть)
    4. Entity framework (Core), linq2db, dapper - чтобы вообще примерно понимать, как всякие ORM работают, но это не столь обязательно.
    5. Всякие форматы данных - json, xml
    6. Всякие способы построения апишек - soap, grpc, rest
    Ответ написан
    Комментировать
  • Как языки получают новые возможности из библиотек?

    @res2001
    Developer, ex-admin
    Грубо говоря в компьютере взаимодействие с любыми устройствами заключается в том, что нужно записать некоторый набор байт по определенному адресу в памяти (порт). Адресные диапазоны устройств (порты) и протокол обмена заранее известны. Каждый тип устройства имеет свой собственный протокол обмена с ПК (т.е. набор и количество данных и размер адресного пространства устройства).
    Современные ОС запрещают напрямую работать с устройствами, т.к. защита и все такое. Но ОС предоставляют собственные функции, позволяющие управлять устройствами, только более высокоуровневые. Ну т.е. вы не думаете куда и что именно надо записать, чтоб на экране нарисовалась точка. Вы просто вызывавете функцию ОС с заданными координатами точки.
    Когда все работали под MS-DOS, то ОС не препятствовала низкоуровневому доступу к оборудованию и любая программа могла непосредственно взаимодействовать с устройством без посредничества ОС. Сейчас погрузиться в это можно программируя микроконтроллеры.

    Обычно ОС пишут на Си. Поэтому разработчику ОС достаточно легко предоставить библиотеку API функций для Си. С++ как потомок Си так же умеет работать с Си библиотеками. В других ЯПах приходится реализовывать механизмы, чтоб из них можно было бы вызывать библиотечные Си функции.
    Ответ написан
    Комментировать