Будь сильным в своем незнании! ч.1
Сап, пикабу!
Итак, данная рубрика будет посвящена теме *войтивАЙТИ*. Серия будет включать что-то из Си( база), что-то из Си++( основа), обратная разработка, машинное обучение и, возможно, питон( алгоритмы машинного обучения), так-же и немного жизненных моментов. Будут ссылки, названия книг(ищем в гугле), программ(так-же гугл), и живые примеры, но не будет ничего готового(аля результат с гитхаба, ибо всё надо делать самому. А тот кто ищет, тот найдет(с)стетхем.)
Немного предыстории:
В один день я понял что жить моим образом жизни совршенно невозможно. Мне уже 22, а достижений абсолютно никаких, я просто ничего не добился, никаких стремлений, хоть я и знаю французский\английский\испанский\китайский, но в жизни их не использую( раз в год беру переводы на заказ, да видосики смотрю на ютубе в оригинале, боже, вот это достижение), решил поставить себе цель, да и улучшить свою жизнь в целом - бросить курить, начать делать зарядку, да и вообще добиться чего-нибудь.
Моя задача написать бота с использованием машинного обучения для компьютерной игры(дота2\ск2\л2\мб даже вов). В приоритете дота2(результат уже гуляет по сети, без обучения правда, но идёт!).
Отношения к айти я никакого не имею, языков програмирования не знаю( китайцу сайт на питоне разок сделал), ну скрипты для бота в л2 писал, всё-же это дичайшая мелочь.
Итак, приступим.
Заходим в интернет( браузер), в поле для ввода пишем: google.ru. Зашли? Круто!
Введите в поисковой строке: Пикабу. Увидели ссылку на наш любимый портал? Отлично!
Теперь введите: слово: пурпурный. Увидели все оттенки пурпурного цвета? Супер!
Теперь вы знакомы с гуглом, он хранит ответы на ваш любой вопрос. Можно спросить у него *Как разобрать телефон*, и он покажет\расскажет. А можно спросить *разбор iphone6*, и вы даже найдёте детальное видео с разбором.
Единственный минус - вы отучаетесь думать творчески, вы привыкаете к приёму готовой информации, и ваш мозг перестает усиленно запоминать информацию. Поэтому постарайтесь обращаться за помощью к гуглу, только если ситуация действительно сложная.
\\\\\\\\\\\\
Запомните, умение пользоваться гуглом спасёт вас ещё миллиарды раз.
\\\\\\\\\\\\
Нам нужно вспомнить английский, увы, без него никак, хотя-бы выучите алфавит и скачайте гугл переводчик на телефон. Я вас уверяю, лексика может быть и сложная, термины-хуермины, но на английском существует намного больше знаний, тут тебе и европейцы пишут гайды, и индусы, и американцы, да все умеют в английский, это проще чем кажется. Для изучения могу посоветовать: смотреть сериалы на инглише, учить по 10 слов в день( 365х10=3650 в год, а это уже дохуя). Да и вообще пригодится( мы же за знаниями пришли, да?).
Начнём с азов, увы, без них никак.
Что такое компьютер и причём тут программирование?
Компьютер - сложное вычислительное устройство ( тупая машина)внутри которой упорядочено передаются сигналы.
Первоначальные вычислительные устройства были сделаны из лампочек и проводов. Провода переключались вручную и лампочки горели, позже были придуманы методы передачи без ручного переключения проводов( программирование зародилось где-то тут), пользовательский интерфейс и прочее. и на данный момент мы имеем компьютер в таком виде, какой он есть. Хотя и прошло более 50-60 лет, принцип не изменился, так-же передаются сигналы и техника работает, но появились более сложные шаблоны алгоритмов.
Сигналы передаются по заложенным алгоритмам.
А программирование - есть построение и упорядочивание этих алгоритмов. Машина - тупой кусок железа передающий сигналы по заложенным программам, чем дольше вы будете этим заниматься, тем больше вы будете в этом убеждаться. На каком языке бы вы не писали( си\ява\питон...), ваш код будет переведен компилятором в машинный код, а машина уже будет выполнять машинный код.
У каждого действия должен быть план. Умение грамотно разобрать задачу помогает эффективно расходовать ваше время и принимать эффективные решения! Человек действует так-же.
Движение указательным пальцем левой руки производится благодаря натяжению связки кисти, связка натягивается изза напряжения мышцы, мышца напрягается изза импульса переданного нашим мозгом. Т.е. Импульс -> напряжение мышцы -> натяжение связки -> движение пальца( возможно этот процесс проходит совершенно по другому, кто вкурсе поправьте). Это действие заложено у нас самой матушкой природой. Так делал ещё тот, кто говорил "я твой дед", и дед моего деда делал так, и дед деда моего деда...
Но человек является разумным существом!
Произвести движение пальца можно и иными методами. К примеру, можно ПРАВОЙ рукой передвинуть указательный палец левой руки, можно подставить палец под кипяток - палец невольно согнётся, а можно кольнуть иголкой в кисть и палец дрогнет.
Все 3 метода являются верными, в теории они должны приводить левый палец указательной руки в движение, но...
Первый метод: лишает правую руку мобильности, и не всегда может быть выполнен( правая рука занята).
Второй метод: повреждает палец( кипяток же), а вдруг чувствительность отсутствует?
Третий метод: двигает всеми пальцами сразу( а нужен только указательный), а вдруг чувствительность отсутствует(результата не будет)?
Все эти 3 метода являются *костылями*. К ним нужно прибегать только в случаях безысходности( в мануалах пусто, гугл молчит, китайский гугл молчит). Использование костылей влечёт за собой разнообразные последствия.
Костыли бывают разные: гениальные, ленивые, из жопы...
Использование костылей зачастую необходимо( рука не двигается), а зачастую является абсурдным( нахуй лысому расческа?)
Для избежания костылей, задачу необходимо обдумывать и планировать задачу.
Моя задача написать бота с использованием машинного обучения для компьютерной игры. ->
Бот - программа, выполняющая определенные действие при определенных условиях. ->
Условия нужно получать из игры. ->
Из игры - из памяти приложения(вообще можно сканировать изображение, можно перехватывать пакеты...) ->
Чтение памяти - обратная разработка( reverse engineering) ->
Что же это за чудо то такое? Загуглим!
Вообще можно пытаться найти уже готовый метод, а если его нет? Или разработчики внесли изменения в игре и теперь всё по другому?
Нужно учиться, в интернете есть отличная книга "reverse engineering для начинающих" Дениса Юричева. Наишикарнейший пример практики и теории в одном. Но автор советуют иметь познания о Си\Си++, чем мы и займёмся.
Ищем книгу "Язык программирования Си( второе издание)" Брайана Кернигана и Денниса Ритчи. Покупаем( ага) её и начинаем читать. Примеры выполняем на https://ideone.com/ и https://godbolt.org/ ( во втором просто глазеем, рассматриваем, пытаемся уловить принцип, меняем код, смотрим что поменялось, меняем порядок действий, смотрим результат, меняем значения, смотрим результат)