• Как правильно реализовать "тяжелый" внутренний сервис в Django?

    @nirvimel
    Нужно вынести тяжелые объекты за пределы веб-сервера в отдельный процесс, интерфейс к ним обеспечить через RPC на любом транспорте (например, ZeroMQ или голый TCP в качестве транспорта). Это будет архитектурно более правильно. Веб-сервер при этом останется легковесным, многопоточным (что у вас под Apache? Gunicorn? UWSGI? - многопоточность - их задача) и, главное, stateless (каким он и должен быть). А процесс, инкапсулирующий тяжелый объект, станет сервером RPC, прединициализированным, оптимально закешированным, не вызывающим перерасход памяти (расход почти постоянный и не зависит от нагрузки со стороны веб-клиентов) и, главное, statefull (каким он, скорее всего, вам и нужен).
    Ответ написан
    1 комментарий
  • Как вызвать функцию на основе двух функций?

    @nirvimel
    x1, x2 = getarray1(), getarray2()
    x3 = getarray3(x1, x2)
    buildgraph(x1, x3)
    Ответ написан
    Комментировать
  • Инструмент для определения чем занят диск?

    @nirvimel
    Чем занят диск: WinDirStat (скачать).
    Разбивка на разделы, форматирование, обслуживание:
    1. Acronis Disk Director
    2. Paragon Hard Disk Manager
    3. EASEUS Partition Master
    Ответ написан
    Комментировать
  • Как отключить локальный сервер от интернета?

    @nirvimel
    Заставить слушать только локальный сетевой интерфейс (127.0.0.1).
    Listen 127.0.0.1:80
    документация
    Так 80 порт будет открыт только для подключений с локальной машины.
    Ответ написан
  • Почему умножение работает быстрее деления?

    @nirvimel
    Во-первых, это касается только компилируемых ЯП в которых целые и действительные числа представлены нативными типами данных аппаратной платформы. То есть 8/16/32/64-целые и 32/64/80-битные действительные. Все это никаким образом не касается динамических скриптов, а также языков, в которых числа по-умолчанию с длинной арифметикой или пределы значений не указаны в спецификации языка (обычно это означает использование длинной арифметики) - во всех этих случаях вычисления будут идти в десятки/сотни/тысячи раз медленнее чем на голом железе и разницы между умножением и делением (а также другими операциями) не будет заметно вообще.
    Во-вторых, даже на компилируемых языках с нативными типами данных, иногда встречаются дополнительные проверки (на переполнение, например) и особые правила применения математических действий, что влияет на производительность гораздо сильнее, чем разница между делением и умножением. Хороший пример - удивительный случай на cython.
    Ответ написан
    Комментировать
  • Триангуляция поверхности и её сглаживание. Как грамотно реализовать?

    @nirvimel
    Для начала попробуйте на время забыть про физический смысл ваших данных, про все высоты и про 3D вообще. Дальше у вас имеется просто некая функция z = f(x, y) от двух аргументов, заданная таблицей значений в некоторых точках (ваши высоты). Вам нужно получить значения этой функции в других точках с меньшим шагом, то есть с большим разрешением по x и y. Это классическая задача 2D-интерполяции. Методов решения масса. Классикой считаются Бикубическая интерполяция и Фильтр Ланцоша.

    Что касается готовых решений, то, например, в scipy есть соответствующие инструменты.
    Ответ написан
    1 комментарий
  • Как вывести индекс определённого значения в многомерном массиве в Python?

    @nirvimel
    1. У массива numpy нет метода index().
    2. Вывести все индексы всех ненулевых элементов grid1:
    import numpy
    
    
    def print_all_non_zero_values(arg):
        print ((numpy.array(arg) > 0).astype(numpy.intc))

    3. Подсчет ненулевых соседей:
    import numpy
    
    
    def count_neighbours(source):
        grid1 = numpy.array(source) > 0
        x_size, y_size = grid1.shape
        grid2 = numpy.zeros((x_size + 2, y_size + 2), dtype=numpy.intc)
        grid2[ :-2,  :-2] += grid1
        grid2[1:-1,  :-2] += grid1
        grid2[2:  ,  :-2] += grid1
        grid2[ :-2, 1:-1] += grid1
        grid2[1:-1, 1:-1] += grid1
        grid2[2:  , 1:-1] += grid1
        grid2[ :-2, 2:  ] += grid1
        grid2[1:-1, 2:  ] += grid1
        grid2[2:  , 2:  ] += grid1
        return (grid2[1:-1, 1:-1] - 1) * grid1

    Тест:
    count_neighbours(((0, 0, 1, 0),
                      (0, 1, 1, 0),
                      (0, 1, 1, 0),
                      (0, 1, 0, 0),))

    Результат:
    array([[0, 0, 2, 0],
           [0, 4, 4, 0],
           [0, 4, 4, 0],
           [0, 2, 0, 0]], dtype=int32)
    Ответ написан
  • Надежен ли такой метод хранения паролей?

    @nirvimel
    Что только люди не придумают, чтобы не использовать KeePass.

    UPD: А теперь по существу:
    При распаковке файла из архива (даже при использовании интегрированного просмотрщика из GUI архиватора) распакованный файл в открытом виде пишется на диск. Если в этот момент убить процесс архиватора, то файл останется на диске. Даже если вы совершенно точно потом вручную его удаляете его, все равно остается возможность его восстановить, причем неизвестно в течении какого времени его остатки можно будет найти на диске, это могут быть и годы. Единственное, что может помочь - средства гарантированного стирания (файла и свободного места на диске). Но их применение еще больше усложняет процесс извлечения паролей, следовательно повышает вероятность случайной ошибки.

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

    @nirvimel
    Многоугольник A лежит полностью внутри выпуклого многоугольника B, тогда и только тогда, когда каждая из вершин A лежит внутри B.
    Ответ написан
    4 комментария
  • Какая должна быть функция?

    @nirvimel
    функция — это соответствие между элементами двух множеств, установленное по такому правилу, что каждому элементу одного множества ставится в соответствие некоторый [один] элемент из другого множества.

    Функция (математика)

    Следовательно, не может существовать такой функции y(x), в которой одному значению аргумента x соответствуют разные значения функции y, как у вас (4, 0.5), (4, 1), (4, 1.5), (4, 2).

    Зато вполне могла бы существовать x(y), график которой проходил бы через данные точки.
    Ответ написан
    Комментировать
  • Сколько измерений имеет комплексная координатная "плоскость"?

    @nirvimel
    Комплексное число очень грубо можно рассматривать как вектор двух действительных чисел (сейчас тут математики громко возмутятся, пускай, будет интересно их послушать). На двухмерной координатной плоскости хорошо представляются значения (но не координатные пары) комплексных чисел, их ряды и интервалы (в виде двумерных кривых). В трехмерном пространстве можно представлять графики комплексных функций от действительных аргументов и действительных функций от комплексных аргументов. Но комплексная функция от комплексного аргумента не имеет графического представления, потому что такое представление возможно только в четырехмерном пространстве.
    Ответ написан
    3 комментария
  • Какую роль играет язык Python?

    @nirvimel
    В январе был вопрос, в ответе на который, я подробно расписал каким образом Python применяется в различных сферах. Мой ответ набрал больше 15 лайков, после чего через несколько дней вопрос со всеми ответами был удален автором (или модератором). Вот так отдельные личности выражают благодарность отвечающим и плюют на мнение сообщества. Несмотря на то, что я хорошо помню все свои ответы, у меня нет ни какого желания повторно писать то, что другие стирают (а у вас такое желание будет?).
    Ответ написан
    Комментировать
  • Как вернуть код ответа 200, но при этом чтобы был редирект?

    @nirvimel
    <html>
    <head>
    <meta http-equiv="Refresh" content="0; url=http://www.example.com/" />
    </head>
    <body>
    </body>
    </html>

    Refresh Meta tag and HTTP refresh header
    Ответ написан
    Комментировать
  • Что на фотографии и где это используют?

    @nirvimel
    Надо бы открутить радиатор (он, вроде, достаточно просто прикручен) и посмотреть что скрывается под ним. Там, похоже, находится самая интересная часть, взгляд на которую, даст понимание типа и назначения устройства.
    На неприкрытой радиатором части платы мало интересного: разъем питания, входной фильтр питания, разъем LAN, (похоже на) контроллер LAN, отладочный разъем - все это не говорит почти ни о чем.
    Ответ написан
    Комментировать
  • Как лучше брать оплату за работу (фикс за объем / фикс за время / почасовая)?

    @nirvimel
    Разумеется, это личное дело каждого, и каждый делает выбор для себя исходя из своего характера, индивидуальных черт и (немного) из стремления обхитрить работодателя (для работодателя естественно стремление сократить расходы, т.е. обхитрить работника).

    Но лично я заметил в людях одну особенность:
    • Сдельный вариант оплаты (в качестве работника и в качестве работодателя) выбирает люди, которые являются капиталистами в душе, потому что склоны мерить ценность человеческого труда в стоимости продуктов этого труда (в т.ч. услуг).
    • Повременный вариант оплаты (в качестве работника и в качестве работодателя) выбирает люди, которые являются социалистами в душе, потому что склоны мерить ценность человеческого труда в объемах затраченного работником времени.


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

    @nirvimel
    Ваша структура данных называется ориентированный граф. Вершины графа - контрагенты. Направленные ребра - ситуации, когда контрагент А предлагает товар, который контрагент Б желает приобрести (запрос на выборку таких ситуаций пишется на SQL элементарно и отрабатывает почти мгновенно при наличие правильных индексов).
    У вас есть две задачи:
    1. Нахождение циклов в ориентированном графе (идеальный вариант). Готовые решения существуют.
    2. Нахождение самого длинного пути в ориентированном графе. Некоторые подходящие алгоритмы также можно найти.

    Ответ написан
    4 комментария
  • Тостер сломался?

    @nirvimel
    Где-то с середины января (сейчас уже сложно точно определить когда это началось) ситуация постепенно все ухудшается - частые 5ХХ, сильно выросло время ответа сервера (иногда по много секунд).
    Почему администрация не обращает на это внимания? - Может при доступе конкретно из их локации проблема не воспроизводится (бывает такой тип проблем, особенно при балансировке нагрузки), поэтому они не верят в серьезность ситуации. Легко проверить взглянув на статистику по вопросам, ответам и активности экспертов, она отличается от 2015 не в лучшую сторону. Причина: пипл не желает хавать печенки с багами и уходит с площадки. Например, раньше я легко мог писать до 10 ответов в сутки и больше, теперь даже не каждый день отвечаю. Не то чтобы мне стало более лениво этим заниматься, просто адекватные вопросы (по программированию, в основном) куда-то пропали. Меньше адекватных вопросов => меньше активность отвечающих => меньше желание задавать интересные вопросы в таком месте => меньше адекватных вопросов. У меня нет доказательств, что все это вызвано техническими причинами, не исключено и совпадение, но будет жалко, если такая замечательная площадка загнется тупо по техническим причинам.

    14 секунд ожидания, например
    9e4fd89b9cc841559a5dd8cce8449f7b.pngdd3542d6a5a74e838e06b6f0da2912eb.png
    Ответ написан
    1 комментарий
  • Как грамотно обозвать строку-сепаратор, которая используется для разделения разных сущностей в текстовых форматах типа "ключ-значение"?

    @nirvimel
    Я думаю, marker будет правильным словом.
    Это слово не редко встречается в контексте data format.
    Релевантные результаты со словом boundary найти сложнее.

    Маркер, выделяющий какой-то раздел будет, вероятно, section marker

    Например, можно назвать идентификаторы section_begin_marker и section_end_marker.
    Ответ написан
    1 комментарий
  • Возможно ли сейчас жить за счет багхантинга?

    @nirvimel
    Даже крупные специалисты в этой области не живут на вознаграждения за найденные уязвимости, а имеют некоторую основную работу (в той же сфере, но на окладе). Какими большими не были бы вознаграждения, нахождение бага по сути - просто удача, на которую нельзя полагаться.

    P.S.: На Тостере вряд ли сидят опытные багхантеры, получавшие вознаграждение неоднократно.
    Ответ написан
    Комментировать