Задать вопрос
  • Что почитать в плане математики для программирования?

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

    Для каждой сферы нужен разный матан. Для веба он вообще не нужен. Чисто инженерная дисциплина. Для системного программирования тоже. Ну, максимум всякие логические операции и побитовые. Для игр линал, для маш обучения линал, теорвер и матстат, так как это математическая дисциплина

    И вроде это все программирование, но что-то инженерные задачи решает, что-то математические, а что-то решает и то, и то.
    Ответ написан
  • Как в С++ из INT сделать string16?

    @SolidMinus
    Из документации:

    String class for 16-bit characters.

    This is an instantiation of the basic_string class template that uses char16_t as the character type


    Тогда как-то так

    int code = ...;
    std::u16string str("");
    
    str += (char16_t)code;
    Ответ написан
  • В какую память попадает строковый литерал?

    @SolidMinus
    Не занесется, верно. Будет передаваться указатель на readonly секцию:

    lea eax, [Адрес]
    push eax
    call foobar


    В некоторых случаях если передается дело в указатель оптимизатор может оптимизировать в read-write секцию. В некоторых, может. gcc точно так не делает, поэтому модифицировать строковый литерал не модифицируя права доступа - не советую :)
    Ответ написан
    Комментировать
  • Как разработать драйвер виртуального устройства на winapi?

    @SolidMinus
    Задание по изучению драйверов на Winapi, хорошо знаю winapi


    Начну с того, что докопаюсь. Драйвера не имеют доступа к WinAPI. Все Вынапи определено в библиотеках уровня пользователя. Драйвера имеют с уровнем ядра и использует NativeAPI из ntoksrnl.exe

    В чём, кроме блокнота, разрабатывать драйвер?


    В редакторе кода *trollface*

    Visual studio + Windows WDK

    https://msdn.microsoft.com/en-us/library/windows/h...

    Что значит создать драйвер виртуального устройства


    Это значит, что будет только драйвер без устройства. Суть в том, что драйвер - это не обязательно связанное с устройствами. Это просто код работающий на 0-м кольце ( в ядре ). Загрузить его можно как и обычно - через службу ( InstDrv делает это все за нас, а после выгрузки удаляет )

    в примере HTTP драйвер винды (да, этот протокол реализован через ядро).
    8787af477cb848e3a14ea3fcbea0306b.PNG

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

    (с сайта rootkit.com)


    О_О

    Сайт с 2006 года мертв :D

    Передай это дино-составителям задачи))

    книги "Руткиты: внедрение в ядро Windows" Г. Хоглунд, Дж. Батлер


    Ну не укладывается, что в универе просят писать руткиты под винду, хоть убей)
    Ответ написан
    1 комментарий
  • Как грамотно работать с указателями в c++?

    @SolidMinus
    Вопрос я честно говоря мало понял. поэтому отвечу как понял.

    И каждый раз будет создание нового указателя


    Создание указателя ничем не отличается от создания другой переменной. Это просто переменная в которой находится значение (4 байта на x86, 8 байт на x64) адреса какой-либо ячейки памяти. Если этот процесс сопровождается выделением памяти под что-либо, то процесс, безусловно, становится дольше. Но это не идет ни в какое сравнение со скоростью в других языках, например, интерпретируемых. Поэтому особого запара предполагать не должно.

    Как же работать правильнее с данным типом данных, вроде здравый смысл говорит что второй вариант "логичнее" и понятнее, особенно когда появляется 10-15 методов обработки 1 кадра. И каждый раз будет создание нового указателя


    Я не совсем понимаю в чем проблема. В выборе способа возврата значений из функции?

    И через this-> и через return скорость одинаковая. Это линейные операторы со сложностью O(1) ( как и все присваивания ) и не должны волновать как либо.

    И, я, честно говоря, совсем не понимаю, зачем браться за довольно сложный для новичка OpenCV если не понимаешь даже что такое указатель?
    Ответ написан
    2 комментария
  • Обязательны ли заголовки в http?

    @SolidMinus
    Обязательны, это спецификация протокола. Прикол лишь в том, что достаточно обычно просто HTTP/1.1 200 OK при ответе
    Ответ написан
    Комментировать
  • Как определить алгоритмическую сложность функции?

    @SolidMinus
    Внутри foreach используется strcmp, имеющий сложность O(N)

    Цикл также имеет такую сложность. Сложности алгоритмов вложенных перемножаются:

    O(kN^2 + nlogn)

    k - количество внутри алгоритмов со сложностью O(N), так как там strtolower, preg_split и т.д, то, соответственно домножается цикл O(N*(N + N + ... N)) ( в пределах одного блока сложности суммируются )

    nlogn - из-за usort, я не знаю какой там алго используется, поэтому возьмем самый быстрый.

    В результате округляем до того значения, который дает большой самый вклад, т.к при росте сумма nlogn становится незначительной, как и множитель k, то: O(N^2) ответ

    P.S. Существует метод для не-аналитической оценки сложности алгоритма.

    Берешь в цикле увеличиваешь размер входных данных и замеряешь скорость выполнения, строишь график где по Y откладываешь время, а по X - N и обычно точки ложатся в пределах какой либо функции: y=N;Y=N^2;Y=logN и т.д
    Ответ написан
    8 комментариев
  • Существуют ли криптовалюты с майнингом который эффективней на CPU?

    @SolidMinus
    Да, XMR. За счет использования расширения для процессоров вычисляющий очень быстро AES
    Ответ написан
    2 комментария
  • Изучение искусственного интеллекта?

    @SolidMinus
    достаточно сильное математическое образование


    факультете "Программная инженерия"


    Лол :D

    Если много ответов переворошил, то думаю видел: https://cache-mskstoredata04.cdn.yandex.net/downlo...

    Я хз, может это супер вуз типа ИТМО или еще чего-то, но я ни на одном айти факультете не видел подобной программы математики.

    Учитывая тот факт, что хочешь заниматься искусственным интеллектом - добавь еще парочку НЁХ в тот список, т.к это слишком малоисследованная область.

    В машинном обучении достаточно матстата, теорвера и линала.

    А если хочешь изучать это:

    разработка ИИ в играх, а также нейросети


    То первое это даже не ИИ, там обычные алгоритмы поиска и т.д, например алго А-стар творит чудеса, если в качестве эвристики юзать метрику вероятности проигрыша.

    Второе же - это просто граф, где на вершинах определены линейные сумматоры. Плюс немного матана вроде градиентов и прочей херни. Изучал по статьям на хабре. Сейчас их еще больше.

    p.s сейчас активно изучаю Си и было бы большим плюсом, если именно эти знания можно применить на начале моего обучения


    Не советую, слишком много деталей на которые надо будет обращать внимание. Память, выход за пределы массива, и вообще неведомая фигня с обработкой тензоров (многомерные массивы, часто 3-хмерные и 4-хмерные, иногда пяти-мерные ) - сам понимаешь, на си можно ногу сломить.

    Советую питон, язык элементарный, изучается за пару дней при должном знании языков вроде си и плюсов, т.к интуитивно все будет просто, что задашь вопрос: "А ЧЕ ТАК МОЖНО БЫЛО? ЫЫЫ"
    Ответ написан
    Комментировать
  • Как сделать чтобы если число было не целое, выдавало -1 в ответ?

    @SolidMinus
    Ты сравниваешь некоторое число с типом, тебя ничего не смущает?

    def get_row_len(row, col, cell_index):
        A = (cell_index / row) - col
        if round(A) != A:
            return -1
    Ответ написан
    Комментировать
  • Как читать виртуальную память с помощью winapi?

    @SolidMinus
    Какое-то мутное задание. Читы/трояны/etc?

    VirtualQueryEx - запрос страниц памяти, ReadProcessMemory - прочитать пммять, WriteProcessMemory - записать.
    Ответ написан
    7 комментариев
  • Почему в массив объектов добавляется только последний объект созданный в цикле?

    @SolidMinus
    Может ответ и не по теме, но так нифига не делаются дела. Надеюсь, ты перепишешь этот ужас))

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

    1) Берешь, ставишь numpy

    Задать матрицу весов можно таким образом:

    weights_1 = np.random.randn(input_num, hidden_neurons)
    b1 = np.random.randn(hidden_neurons)
    weights_hidden = np.random.randn(hidden_neurons, output_n)
    b2 = np.random.randn(output_n)


    Где input_num - количество входных нейронов, hidden_neurons - скрытых нейронов.

    Тогда ты имеешь матрицу где для каждого нейрона задаешь вектор весов его связей. Например, если входных нейронов - 10, а скрытых - 64, то матрица размера 10x64

    Тогда получить выходной вектор со скрытого слоя можно очень просто

    hidden_out = np.dot(X, weights_1) + b1

    И таким же образом на выходной

    >>> output = np.dot(hidden_out, weights_hidden) + b2 # где получаем выходное значение, в данном примере output_n = 1
    >>> output.shape
    (1,)
    >>> output
    array([ 199.52290173])


    Получили значение на выходном нейроне. Теперь надо это дело обучать.

    Надеюсь, понятно объяснил как правильно задавать нейронные сети?)

    В примере я не юзал функции активации, но они делаются также просто. Просто допиши к вычислениям каждого аутпута функцию активации, например, relu-активацию

    hidden_out = np.max(0, np.dot(X, weights_1) + b1)

    Забудь, пожалуйста, про ту жесть что ты написал. Без обид, сам таким был)
    Ответ написан
  • Я изучаю одно а в колледже другое. что делать?

    @SolidMinus
    Ответ написан
    Комментировать
  • Python. Requests как исправить проблему с авторизацией?

    @SolidMinus
    В заголовок добавь User-agent одного из браузеров. Мне помогало. Очень часто такое определение работает тупо по тому какой браузер у юзера.

    sess = requests.Session()
    headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0"}
    response = sess.post(url, ..., headers=headers)
    Ответ написан
  • Кто проходил курс обучения от learn.python.ru? Как вам?

    @SolidMinus
    Так не пойдет. Начни изучать в применении к той области, которая интересна. Иначе ничего не выйдет.

    Интересен геймдев - вперед в геймдев. Интересно сис.админство - import os и вперед, интересно машинное обучение - pip install scikit-learn и вперед. То что непонятно как реализовать - читать и вникать. А сухая зубрежка синтаксиса ни к чему полезному не приведет.
    Ответ написан
    3 комментария
  • В каких случаях эффективнее дублирование кода вместо вызова функции?

    @SolidMinus
    Если вставлять inline функции, то бинарный код в размере очень сильно будет расти, но будет скорость выполнения будет также расти.

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

    Поэтому это все можно упростить до такой степени, чтобы выполнялся лишь нужный код. Для этого лишь не надо плодить функции. Замечаешь разницу в количестве выполняемых этапов?

    Если размер кода так критичен, но и нужна скорость, то можно выставить _fastcall перед определением функции, тогда вместо _cdecl функция будет вызываться без передачи параметров через стек, а передаваться внутри регистров. Это увеличит скорость вызова функций. Но не стоит злоупотреблять, т.к регистры используются для "быстрых вычислений", без доступа к памяти, и огромное количество _fastcall функций заставит компилятор перед вызовом функций постоянно сохранять состояние регистров, а потом восстанавливать.

    Решается это все настройками оптимизатора на скорость или размер кода. При выставленной оптимизации по размеру кода спецификатор _inline игнорируется.
    Ответ написан
    6 комментариев
  • Какую вы знаете литературу о внутренностях С++?

    @SolidMinus
    Советую по операционным сетям почитать книжки. Все-таки плюсы - компилируемый язык. С полной поддержкой указателей. И изучить хоть чуть-чуть язык ассемблера. Потом пореверсить свои приложения ( главное, простые, дабы не утонуть в листинге асма). Тогда будет понимание, что C++ - это по-сути своеобразный синтаксический сахар для машинного кода, придет и понимание всего всего, что там происходит, за исключенеим процесса компиляции. Во-всяком случае, так было у меня.

    Больше не возникают вопросы по поводу указателей, совсем. Когда видишь, как при отключенном CRT коде классы разворачиваются в чистейший процедурный ассемблерный листинг - начинаешь удивляться насколько все просто в этой идее ООП. Просто взять и завернуть эти бесмысленные вызовы процедур во что-то более красивое.

    P.S. Без CRT кода просто твой C/C++ код компилируется в то, что ты написал. Нет ни единой чужой строчки кода. Ты просто видишь, во что компилируется код и понимаешь что все компилируемые языки это просто упрощение жизни, а не изобретение чего-то нового. Все эти парадигмы все равно сводятся к языку ассемблера, какие бы они не были. Собственно, и интерпретируемые языки - это просто ассемблерный код, анализирующий текст и в зависимости от того че там написано выполняющий какие-то действия.

    Но есть и минус. Придет полное непонимание интерпретируемых языков в плане работы с памятью. Будешь мыслить уже в контексте указателей. Я иногда реально жестко туплю, казалось бы, на простых элементах языка Python.
    Ответ написан
    3 комментария
  • Как добавить использование GPU в программы на Python?

    @SolidMinus
    PyCUDA https://documen.tician.de/pycuda/

    Нет, полностью не надо. Только там где идет перебор seed. Надо распараллелить по ядрам куда. Конкретно как это в питоне делается я хз, юзаю CUDA из Си. Уверен, что в PyCuda все еще проще.

    P.S. Для работы требуется видеокарта Nvidia с установленной CUDA toolkit

    UPD: Погуглил. Поддержки у питона CUDA API нет. PyCUDA использует wrapper для Си-образного кода для параллельного программирования от Nvidia. Придется весь код перебора переписывать в этом контексте, и исполнять его через PyCUDA. В документации есть пример такой реализации. Поэтому вердикт: если хочешь юзать GPU, придется изучать еще как кодить под GPU.
    Ответ написан
    Комментировать
  • Какой выбрать компилятор на си?

    @SolidMinus
    Visual Studio же, самое удобное

    UPD: Выпендрежникам: не надо мне писать про различие компилятора и IDE. Я это понимаю, а автор нет. Поэтому я отвечаю не то что написано в вопросе, а то что он имел ввиду.
    Ответ написан
    5 комментариев
  • Что посоветуете для сравнения двух предложений по смыслу?

    @SolidMinus
    Унифицирование подойдет как препроцессинг текста. Т.е, есть некоторое множество < K, V >, где K - числовое описание класса синонима ( например, различные синонимы в один класс ), V - тензор синонимов, где по 0-й оси отложены вектора со словами, содержащие кодированные ( Unicode, так понимаю в данном случае ) слова. Стоит обратная задача нахождения по V соответствующего K, почти как словарь, но наоборот. Предложение трансформируется в последовательность K_i, после чего эта унифицированная, как вы правильно сказали, анализируется. Перед анализом унифицированный вектор надо отобразить в пространство фиксированной размерностью, чтобы все предложения были как бы одинаковой длины. Можно просто дописать нули, например, чтобы вектор стал с 5 компонентами ( максимальная длина предложения )

    Тут два варианта. 1-й более эффективный и сложный, 2-й более простой
    1) LSTM-сети. Почему LSTM? Потому что данный вид RNN сетей наиболее подходит для анализа последовательностей.
    По выходу определяете смысловой класс. Т.е, имеем RNN с 5 входами, и выходами, равными количеству смысловых классов, дающее k-мерный вектор распределения вероятностей по классам. argmax(output) будет наш класс. Типичная задача мультиклассовой классификации, но при помощи RNN сетей. Если с рнн не разберетесь, можно обычную MLP-сеть, но выход будет хреновеньким, т.к это последовательность завязанная на предыдущих состояниях элемента. У нас не бывает предложений вроде "привет нет да пока эх машина".

    Нужно предобучение на огромной базе размеченной вручную. Т.е, такой вектор - такой класс.

    2) Можно пойти по простому пути, без нейронных сетей использовать норму разницы между двумя векторами. Требуемым, и введенным, чем меньше норма - тем более близкое по смыслу предложение. Ведь числовая последовательность предложения является вектором в n-мерном пространстве. В нашем случае после нормализации в 5-мерном пространстве. А норма - это обобщение расстояния на большие размерности, т.е при разницы векторов предложений мы получаем третий вектор, чья длина - расстояние между векторами. Можно использовать различные метрики. Какая больше нравится. Я бы предпочел метрику минковского c p = 2.

    Предобучение не требуется, никаких сложностей тоже. Просто школьная арифметика. Но и предложения, например:

    "Сегодня я пошел в школу снова" и "Завтра я поеду в командировку опять" могут показаться одинаковыми по смыслу. О чем и говорил Максим Чернятевич, имея ввиду, что с базой синонимов можно сделать только самый простой анализ, т.к после нормализации по синонимам в один вектор, скорее будут полностью равны.
    Ответ написан
    2 комментария