Представьте себе, со мной связался автор и попросил больше не редактировать его рисунки, а старые вообще удалить. Но в твиттере так и не разблокировал
как разблокировать код
»фото ПДД автомобиль
Вакуумный блокировщик обзора на лобовое стекло, разблокировать можно только оплатив штраф, ну или сменив лобовое стекло
много букв c++ языки программирования программирование geek программист люди читерство личное
Заметки отпетого разработчика.
Конечно, есть силы молчать, однако в этот четверг мне в стакан "любви" к людям в очередной раз долили через край.
Коротко о себе:
Программист - в настоящий момент Ведуший или Lead*(см. сноска 1). Более 20 лет опыта - С и С++ любимые языки общения с персоналками.
За последние 3 года из 500 назначенных интервью я провел почти 300 - Я интервьюирую людей для компании-работодателя.
В общем, возможно этот крик души будет полезен кому-то, кто сейчас ищет работу по специальности разработчик программного обеспечения.
Остальным можно смело пролистывать, будет много терминов и даже, вы наверняка сочтете, что я использую ненормативную лексику.
Начнем с теоремы:
В IT компаниях, при найме, стараются оценивать профессиональные навыки и избегать субъективности.
Доказательство от противного (от меня):
Я, торжественно клянусь, да отсохнет мой член если я вру, что даже если у Вас пизда поперек и сиськи 5-го размера - мне будет важно только то, как Вы пишете код, а не то что вы кошкодевочка моей мечты.
Перефразирую: положим - Я вас найму, и Вы, чисто случайно, попадете в мою команду
>>> я вас (с Вашей поперек-пиздой) трахать буду минут, в лучшем случае 30 (в день, и далеко не ежедневно) - с возрастом как известно дойти к финишу все труднее*(см. сноска 2).
А вот меня за сгоревшие сроки и проебанный продакшн (приложение, вебсайт) будут трахать всем колхозом месяца 2/3, это если мне дадут notice period*(см. сноска 3).
А ведь могут и не дать, а кое-что похуже сделать - если прям захотят. Контракт что дышло - как повернешь... *(см. сноска 1 - последнюю часть)
Так что, если вы придете ко мне на интервью, будьте уверены, я попрошу Вас написать код.
- Хоть какой-нибудь!
- Хоть одну строчку.
- Ну хоть что-то.
Так вот дорогие мои читатели этого опуса - вы не поверите! Но в этот четверг... Это таки случилось! В очередной раз!
И нет бы это был какой-нибудь новоиспеченный борец за зарплату IT специалиста, который пришел на собеседование без подготовки, курсов и прочитанных книг. Но с чатом GPT или другом за спиной.
Нет! - резюме этого человека выглядело более чем Великолепно. По всем параметрам выходило, что Рекрутеры не ошиблись направляя этого человека именно ко мне,
а не другому интервьюверу уровня Senior*(см. сноска 4)
В его резюме было образование по специальности и даже несколько компаний в которых он числился как специалист и потом Lead*(см. сноска 1 снова). Весь фарш!
А вот то, что получилось: Человек говорил предельно гладко, говорил хорошо! Возможно он читал https://cppreference.com/ и программировал, подумал я, но все-равно дал ему задание.
Ведь для меня важно чтобы человек писал код. Чтобы по крайней мере его уважали люди уровня Senior*(можно еще раз глянуть на сноску 4)
Только вот в критический момент написания пары строчек кода кандидатом, я словил себя на мысли, что пациент нихуя не программист даже уровня Junior*(смотри сноску 5).
-> Если вы хоть немного шарите в программировании (не только С++, но любой язык)
-> и знаете что такое палиндром. (погуглите если не знаете)
То Вы 100% сможете написать функцию для проверки - является ли строка палиндромом или нет.
После того что я увидел на этот раз, хотелось сказать только одно:
Однако - мне было жалко этого человека. Было видно, что он САМ все понял прямо сейчас. В процессе написания - У него в глазах стояли слезы.
Уже потом, просматривая его резюме еще раз, до меня дошло - в какой-то момент он попал в администраторы. Он перестал писать код. Потому что надо же кому то заниматься улаживанием конфликтов, налаживанием коммуникации, документацией в конце концов...
А Ведь кроме как "пинать хуи" - Ваш Lead* должен уметь писать и код. Этот человек это перестал делать уже года 3 как.
А жаль мне было, что за последние 2 месяца он был единственным человеком с большой буквы.
Без Чата GPT, без друга на заднем плане, без гугла, без пауз в ответах он четко признал, что перестал быть программистом и ему пока нужно учиться заново писать код.
Я дал ему еще кое-что на "написать" и "просмотреть" для проверки. Но это было напрасно.
Так что основная моя мысль в этом послании - "Пишите код". Даже если ваша задача на проекте править баги. Пишите код!
Даже если вы считаете, что не знаете что бы такое написать - найдите что - и напишите код. Хотя бы потому что чтобы вырасти из специалиста уровня Junior* в специалиста уровня Middle*(см. сноска 6) и выше надо писать код.
А я, буду откровенен, заебался отсеивать людей, которые не знают даже синтаксис.
И еще - даже не пытайтесь читить с другом или использовать чат GPT. Вы просто получите черную метку в той компании куда хотите попасть.
Напишите ка лучше код. А пинать хуи оставьте тем, кто хочет получить черную метку.
Возьмите задачи например тут https://leetcode.com/
В конце концов - мне в личку черканите.
сноска 1:
Lead* - Ведуший программист - специалист высшей категории (дайте эпичных задач и эпичных людей - и мы все сделаем).
Бытует мнение, что такой человек - Мастер пинать хуи, и хуеплетов. А имено - многие считают, что Lead ни хрена не работает, а всю работу передает (по научному - делегирует) хуеплетам которых и пинает, чтобы они и делали работу.
Некоторые, все же считают, что когда такой человек все же пишет код, то приложение сбрасывает лишний вес и пару давно зарытых в недрах хворей. (это мое мнение)
А еще он - Читает документацию и думает.
сноска 2:
Тут описан медицинский факт и растущий с возрастом спрос на виагру. Например, заниматься спортом или не заниматься - это ваше дело. Так же автору безразличен Ваш персональный способ приходить к финишу. Так что можете выбрать любой из наиболее привлекательных для Вас сексуальный/финансовый/психоделический/иное вариант подкупа интервьювера и смоделировать ситуацию.
сноска 3:
Описанный в статье случай носит научное название "Пиздец на проде". Или "Ебанный в рот менеджер проекта", который по доброте душевной распространяет новые морально-насильственные практики навязанные заказчиком во вверенном ему продуктовом подразделении.
сноска 4:
Senior* - программист - специалист высшей категории (дайте задачу - я ее заебеню!)
Бытует мнение, что такие люди могут забацать задачу, возможно, задавая дополнительные вопросы по существу.
Обыкновенно код написанный такими людьми попадает в продакшн после 2 или максимум трех дополнительных правок. И если продукт после этого ломается, то недолго и в строго отведенных, мало изученных тестировщиками местах. Не верят безоговорочно своему Lead* (см. сноска 1). Если не уважают своего Lead* - то не верят ему вообще - И тогда команда разваливается. А продукту в такое время - мало не кажется.
сноска 5:
Junior* - программист - специалист категории (дайте задачу - я ее ... буду думать!)
Бытует мнение, что такие люди нихрена не умеют программировать, Но это пиздешь.
Эти люди должны знать как написать цикл, какие есть вообще операции и всякие функции в нашем базовом API (Интерфейс для написания приложений).
Не прямо "все все" в этом API, но десяток другой функций уже сойдет. И еще они знакомы с синтаксисом языка программирования.
И безоговорочно верят своему Lead* (см. сноска 1)
сноска 6:
Middle* - программист - специалист категории (дайте задачу - я ее в итоге добью!)
Бытует мнение, что такие люди все-таки умеют программировать. Но это не точно.
Эти люди видели и писали кой-какой код в этой жизни (или в той/или не код). И поэтому любую задачу они будут делать так же как и предыдущую задачу. Вне зависиомости от того похожа предыдущая задача на текущую или нет - они задачу будут делать так же как и задачу до этого. Это беда!
Как следствие продукт ломается от просмотра кода внимательным взглядом Lead* (см. сноска 1). или под воздействием поверхностых проверок тестировщиков. Так что код написанный такими людьми попадает в продакшн после 2 или максимум трех недель ежедневных правок.
Они безоговорочно должны верить своему Lead* (см. сноска 1) И уже должны знать большинство терминов из явления под названием "документация", но еще не совсем понимают эти самые термины - за что их и пинают как хуи.
А Еще - Таких как они, больше всего на свете, из тех кто пишет код - поэтому в мире так много багов и финансовой несправедливости.
сноска 7:anon
Спасайте, выручайте
Друзья, дело в том, что мой акк в вк заблокировали, а чтобы разблокировать нужно указать номер телефона на который должен прийти код подтверждения (стандартная процедура), но у меня все номера уже заняты, а тот номер телефона, на который был открыт заблокированый аккаунт давно утерян, не покупать же новый номер в этих целях. В общем, если есть у кого свободный номер, скиньте пожалуйста в личку http://joyreactor.cc/user/ComSyntax если не жалко.anon цветные шпитан Seek and Destroy
geek Игры story
Как взломать вампира или История одного нубохака
Пролог
Пару лет назад на просторах интернета столкнулся с многообещающей игрой с фурри-проном в вампирской тематике. Игра называлась (и называется) “Vampire Life”. Вампирскую тематику я люблю, рпг уважаю, название намекает на некий симулятор, что тоже неплохо, а вот фурри прон мне заходит ситуативно, т.к многие автора плохо видят границу с зооеблей. Пожалуй, решающим аргументом в пользу скачивания стала необычная рисовка: мультяшная, будто рисовали кисточкой, без нарочитого нарушения пропорций тел и черт лица, чем нынче грешат (грешили и будут грешить) многие ленивые художники называя это “авторским стилем”. В описании на торрентах создатель честно предупредил что в игре присутствует гринд… нет, не так - много гринда, и это несколько настораживало, но я все же решил рискнуть, в конце концов - гринд гринду рознь, и как показало время страхи были не беспочвенными.
Часть 1: Суть игры и мотивация к взлому
Сама игра выполнена на (в?) рпгмэйкере, управление интуитивное, уже в то время (пару лет назад) в игре большинство стоковых ассетов было заменено, что делало визуал более свежим, приятным и приближало его к сеттингу. Сам протагонист - вампир, который проснулся в своем “логове” (на деле - грязной пещере), будучи голым, нищим и потерявшим всю свою силу, навыки и память (если таковые были) за время сна. Клише конечно, но, будем откровенны, большинство сюжетных ходов было изобретено еще в античные времена, так что на данный момент все зависит главным образом от авторской подачи. Вампир знакомится со своей верной, но бестолковой слугой, с жителями поселения которое находится на выходе из логова и решает зарабатывать на жизнь отловом и продажей в рабство/на опыты фурри-розбійників (называемых в игре морфами), что в обилии обитают в тамошних местах, параллельно поебывая тех самых фурри, по возможности не обходя стороной и обычных неписей.Игра обладает множеством механик: потребности (еда, вода, сон, иммунитет), шмотки и оружие, их заточка, крафт, отстройка логова, отношение с неписями, прокачка навыков, зелья, артефакты и т.д., что, хоть и может крепко увлечь на первых порах, в дальнейшем становится рутиной и источником необходимости гриндить для получения новых элементов прогрессии все больше и больше (в оффлайн игре!).С первых секунд игры появляется ощущения что тебя троллят.., нет - откровенно издеваются. Причем не как над персонажем, а как над игроком, и в дальнейшем эти ощущения только усиливаются. Регулярно возникают игровые ситуации, которые требуют значительной прокачки (явно больше чем может иметь игрок попавший в них на старте) или метаинформации, и в случае провала значительно тормозят прогресс игры (еще больше гринда). Самого гринда много: мало лута, мобы имеют рандомные статы, требования по ресурсам для прогрессии значительные. И по мере самой прогрессии только растут. При таких вводных очевидно, что накрутить себе нужных параметров условным артмани становится удобным решением для пропуска дрочи (в плохом смысле), и переходу непосредственно к новой порции контента. И тут меня ждал сюрприз: разработчик озаботился защитой от желающих срезать углы.
Часть 2: Взлом начинается
Так как никакие попытки найти нужные мне значения с использованием тулзов проде читэнжина или артмани не увенчались успехом (и я позже поясню почему), была предпринята попытка модификации сейв файла. Благо что движок популярный - онлайн эдиторы присутствуют, а сам сейв должен являть собой сырой JSON (в теории). В реальности, меня в этот раз постигла неудача - онлайн тулза для модификации сохранений упорно рапортовала об ошибке чтения. Решил заглянуть в сам файл и поглядеть что там не так, и таки что я там вижу? Строка из букв разных кейсов, крайне похожая на нечто заэнкоженное в Base64. Но увы, походить не значит являться (АУФ!) - снова неудача. К тому моменту мной уже плотно овладел азарт, мне было пофиг на геймплей, я хотел решить этот пазл, и очевидно низкий технический уровень разработчика, который просматривался сквозь декорации игры давал надежду что у меня получится. Не можем прочитать сейв? Тогда бы почему не открыть сам проект?Ищу в стиме Rpgmaker MZ, смотрю на цену, вспоминаю что я далеко не самый состоятельный человек в нищей восточноевропейской стране, и отправляюсь в зеленый стим. Ставлю и вылечиваю Мэйкер, создаю новый проект и копирую в него ресурсы из игры. Чуда не произошло - ресурсы не читаются. Открываю файлы ресурсов - там те же закодированные строки заместо джейсонов, как и в сейвах. Т.к чудес очевидно не бывает, и игра все-же должна как-то уметь читать свои же ресурсы, то она явно хранит в себе некий декриптор или декодер который превращает буквенное месиво в джейсон. Пришла пора лезть в код.
Как выглядели ресурсы игры |
Часть 3: Пора кодить
Как в любом приличном проекте на рпгмэйкере , в файлах игры лежит движок, написанный на JS, и который, как я подозревал, был модифицирован автором игры для защиты от взлома и модификации. Хоть я и большую часть времени я пишу на Java, в моей жизни было два года, когда я работал на проекте где приходилось совмещать 50/50 джаву с Node JS. Научившись в свое время отличать асинк от авэйта, промис от колбэка, и запомнив все 6 (или 7?) типов которые существуют в JS я подходил к разбору кода со сдержанным оптимизмом. Который чуть было не иссяк стоило мне увидеть код. ВСЕ было написано на прототипах, на которых писал еще мой прадед в перерывах между охотой на мамонтовую фауну и наскальной живописью. Было ли то результатом некой компиляции из typescript либо невозможностью (или нежеланием, что по сути одно и то же) разработчиков движка добавить в него поддержку es6 я не знал, да и к сути задачи оно не относилось. Через непродолжительное время копания в коде, мною было обнаружено что весь кастомный код содержится в папке /plugins, что весьма логично, в коде есть захардкоженный список ресурсов которые енкриптятся особо, а искомый декриптор, очевидно кастомный, созданный автором игры, хранится в PKD_Protector.js.
Фрагмент того самого обфусцированного протектора |
К слову, в процессе перебора исходников пришло понимание почему в артмани не работает поиск: каждая переменная в памяти игры хранится в двух полях. Условно А и Б. Истинное_значение = A - Б, где Б генерируется случайно при каждом изменении переменной. Таким образом, для поиска условного артмани обе цифры в памяти меняются как-бы случайным образом. Или не меняются, т.к рандом может и совпасть.
И как всегда ложка дегтя: код декриптора был обфусцирован (переписан с сохранением синтаксиса языка, но в нечитабельной для человека форме). Это уже успех - запустив этот скрипт можно получить чистые исходники ресурсов для последующего их открытия в Rpgmaker MZ. В теории. Но на практике посмотреть и изменить ресурсы и скрипты игрового процесса мало - нужно еще вложить их на старое место предварительно зашифровав обратно. А для этого нужен был алгоритм шифрования. Обфусцированного кода всего 300 строк, что очень немного. Расставляю брейкпоинты, запускаю дебаггер помечаю используемые строчки кода и значения. Спустя полчаса алгоритм дешифрования найден и переписан в явном виде (всего в 20 строк). Еще 3 минуты на написание и проверку обратного алгоритма. Запустил сразу на все содержимое папки /data, и получил исходники ресурсов. Теперь (наконец-то!) можно переходить в Rpgmaker MZ и насладится творчеством разработчика.
Как было оно было задумано разработчиком (логика сохранен) |
Часть 4: Глубже в кроличью нору
Еще на этапе игры меня не покидало чувство, что игру делал человек с сильным желанием, хорошей фантазией, большими амбициями но малым опытом в разработке. когда я увидел ресурсы игры мое мнение превратилось в твердую уверенность, с чувством легкого уважения к человеку, который не умея толком кодить, не зная английского языка и изобретая велосипеды по пути, смог сделать (и заставить работать) потенциально многообещающий продукт. Далее просто приведу перлы которые я успел найти в коде:
Естественно, что обладая буквально авторскими возможностями в игре сложно сохранить интерес к геймплею, так что я выдав персонажу все нужное для завершения прохождения текущего билда быстро просмотрел оставшийся в игре контент и отчалил.
Часть 5: Выводы
Мне очень понравилась концепция заложенная в игру “Vampire Life”, у проекта хорошие интенции, и мне жаль что местами проект портит неуместный йумор и баланс настроенный на гринд. Сам проект висит на патроне уже б-г знает сколько и как по мне, разработчику пока остановится с новым контентом, потратить время на починку старого, выправить баланс и релизится с чистой совестью. На полноценную игру контента хватит с головой, хватит сосать из патронов шекели. Удачи разрабу во всем, надеюсь мой пост будет компенсацией за то, что поиграл в версию с разблокированными возможностями так и не занеся ему денег
P.S. Этот пост должен был выйти в день моей днюхи, но слегка запоздал. Не являясь активным участником срачей или контентмейкером реактора я посчитал нужным вместо фотки кота, торта и монитора (у меня и кота то нет), что было бы крайне неуместно и нагло с моей стороны, угостить честной люд вкусным контентом - так будет правильно
Steam халява Steam Игры
MINI NINJAS от Square Enix
1. Переходишь по ссылке
https://store.eu.square-enix.com/eu/product/310553/mini-ninjas-pc-download
2. Логинишься/регистрируешься на сайте, или через Facebook, или Steam.
3. При оформлении покупки указать промо-код "Mini Ninjas".
4. Заполнить кучу инфы о себе(нет).
5. Наконец-то купить.
6. Забрать ключ в "Me Account"-"Orders".
Отзывов положительных 87%. Карточек нет.
Отличный комментарий!