Приветствую тебя дорогой читатель!
В этой статье я расскажу о своем опыте сделать «крутой квест» и как все накрылось медным тазом что у меня получилось. На момент публикации статьи до конца не дошел ни один из участников, поэтому если тебе интересно попробовать и, возможно, получить приз, то ниже тебя ждет QR код. Разгадав кодовую фразу, отправляй её на следующую почту: mysterious_2020@mail.ru
Если же тебе просто интересно почитать чего я там наворотил, то просто продолжай читать.
Читать полностью »
Рубрика «ненормальное программирование» - 22
Неразгаданная загадка
2020-01-04 в 5:25, admin, рубрики: ASCII, SSTV, загадка, ненормальное программированиеРисуем морозные узоры на SQL
2019-12-30 в 8:43, admin, рубрики: dba, postgresql, sql, sql tips and tricks, Алгоритмы, базы данных, визуализация данных, математика, ненормальное программирование, рекурсия
Немного SQL-магии под катом: математика, рекурсия, псевдографика.
Вспоминаем под Новый год формулу угла между векторами:
Читать полностью »
ELFийские трюки в Go
2019-12-29 в 15:56, admin, рубрики: asm, debug, disasm, elf, Go, golang, x86, zydis, Компиляторы, ненормальное программирование, системное программирование
В этой заметке мы научимся получать машинный код Go функции прямо в рантайме, распечатаем его с помощью дизассемблера и по пути узнаем несколько фокусов вроде получения адреса функции без её вызова.
Предупреждение: ничему полезному эта мини-статья вас не научит.
Реактивное программирование, стоит ли бросать все и нестись навстречу мечте
2019-12-24 в 8:02, admin, рубрики: java, reactive programming, sarcasm, высокая производительность, ненормальное программирование, Программирование, функциональное программированиеЕще одна статья про реактивное программирование. И только не надо на этой строчке закатывать глаза и томным голосом говорить вслух — "Ну что еще ты можешь мне рассказать про реактивное программирование… а?". Она немного отличается от кучи других, написаных словно под копирку, поэтому некоторые вещи в ней могут показаться… странными или даже совершенно неуместными, как сортирный юмор.
Совершенно не важно, знаешь ли ты наизусть reactive manifesto, присутствует ли в твоем утреннем кофе бекпрешур, трогаешь ли ты вот этими вот своими ручками всякие паблишеры и сабскрайберы или пишешь старый добрый синхронный, блокирующийся код. А может быть только недавно, кто-то своим откровенно рекламным докладом про светлое будущее и потоковый оргазм (ну или струйный, тут тонкости перевода решают все), от использования одной из реактивных библиотек конечно-же, зажег в твоих глазах интерес к новой технологии.
Будет интересно.
В поисках LD_PRELOAD
2019-12-19 в 20:19, admin, рубрики: C, ld_preload, libc, linux, ptrace, информационная безопасность, ненормальное программирование, системное администрированиеЭта заметка была написана в 2014-м году, но я как раз попал под репрессии на хабре и она не увидела свет. За время бана я про неё забыл, а сейчас нашёл в черновиках. Думал было удалить, но авось кому пригодится.
В общем, небольшое пятничное админское чтиво на тему поиска «включенного» LD_PRELOAD.
Читать полностью »
Транскомпилируемые языки: проекты конвертации код-в-код
2019-12-17 в 12:03, admin, рубрики: Блог компании Mail.Ru Group, ненормальное программирование, ооп, Программирование, транскомпиляторы, транспиляторы, языки, языки программирования
Источник: Ward Cunningham
Транспиляция — это конвертация кода одного языка в другой. С помощью специального транспилера (транскомпилятора) один язык программирования общего назначения можно перенести на любой другой язык программирования общего назначения.
Если необходимо переключиться на другой язык, транспилеры помогут разработчикам сохранить бóльшую часть существующего кода, не переписывая весь код вручную. Например, при преобразовании программ из Python 2 в Python 3, или при переносе софта от старого API в новый.
Термины «транспилер» и «транскомпилятор» часто взаимозаменяемы, но все же считается, что различия есть. Например, для преобразования кода C++ в C потребуется транспилер, а для конвертации Python-Ruby — транскомпилятор. Babel для JavaScript — это транспилер, а TypeScript — транскомпилирумый язык.
Иногда после конвертации транспилером для правильной работы кода требуется ручная настройка, в то время как в транскомпилируемых языках код должен работать без изменений. Сегодня поговорим о тех и о других, но главное — расскажем о популярных транс-проектах, которые разработчики могут использовать в повседневной работе.
Читать полностью »
Как я на спор развернул двусвязный список за O(1)
2019-12-16 в 8:45, admin, рубрики: c++, data-oriented design, Блог компании Pixonic, двусвязный список, Занимательные задачки, ненормальное программирование, Программирование
Как-то раз я случайно увидел, как мой коллега решает джуниорскую задачку разворачивания двусвязного списка на C++. И в тот момент странным мне показалось не то, что он лид и давно перерос подобное, а само решение.
Вернее, не так.
Решение было стандартным: тот же линейный проход с заменой указателей в каждом узле, как и писали сотни тысяч людей до него. Ничего необычного или сложного, но при взгляде на него у меня возникло два вопроса:
- Почему по умолчанию все решают задачу именно так?
- Можно ли сделать лучше?
Unsafe generic math in C#
2019-12-15 в 22:04, admin, рубрики: .net, C#, generics, il, ненормальное программирование
К сожалению, адекватно перевести название затеянного мной безобразия на русский язык оказалось не просто. С удивлением я обнаружил, что официальная документация MSDN называет "дженерики" "шаблонами" (по аналогии с C++
templates, я полагаю). В попавшемся мне на глаза 4-м издании "CLR
via C#
" Джеффри Рихтера, переведенном издательством "Питер", дженерики именуются "обобщениями", что гораздо лучше отражает суть понятия. В этой статье речь пойдет о небезопасных обобщенных математических операциях в C#
. Учитывая, что C#
не предназначен для высокопроизводительных вычислений (хотя, безусловно, на это способен, но не в состоянии тягаться с тем же C/C++
), математическим операциям в BCL
уделено не так много внимания. Давайте попробуем упростить работу с базовыми арифметическими типами силами C#
и CLR
.
CreateRemoteThread для Linux
2019-12-14 в 17:16, admin, рубрики: C, code injection, CreateRemoteThread, dll injection, elf, Facebook юридически обязан сообщить, linux, mmap, procfs, ptrace, возможно, инъекция кода, ненормальное программирование, Разработка под Linux, системное программирование, содержит недостоверную, то есть ложную информацию, что данная публикацияВ WinAPI есть функция CreateRemoteThread, позволяющая запустить новый поток в адресном пространстве другого процесса. Её можно использовать для разнообразных DLL-инъекций как с нехорошими целями (читы в играх, кража паролей, и т. д.), так и для того, чтобы на лету исправить баг в работающей программе, или добавить плагины туда, где они не были предусмотрены.
В целом эта функция обладает сомнительной прикладной полезностью, поэтому не удивительно, что в Linux готового аналога CreateRemoteThread нет. Однако, мне было интересно, как он может быть реализован. Изучение темы вылилось в неплохое приключение.
Я подробно расскажу о том, как с помощью спецификации ELF, некоторого знания архитектуры x86_64 и системных вызовов Linux написать свой маленький кусочек отладчика, способный загрузить и исполнить произвольный код в уже запущенном и работающем процессе.
Для понимания текста потребуются базовые знания о системном программировании под Linux: язык Си, написание и отладка программ на нём, осознание роли машинного кода и памяти в работе компьютера, понятие системных вызовов, знакомство с основными библиотеками, навык чтения документации.
Zork и Z-Machine: как разработчики перенесли игру с мейнфреймов на 8-битные домашние компьютеры
2019-12-12 в 4:34, admin, рубрики: apple II, interactive fiction, TRS-80, Zork, виртуальная машина, Игры и игровые приставки, мейнфреймы, ненормальное программирование, обработка естественных языков, разработка игр, старое железо
Компьютерные игры существуют почти столько же, сколько и сами компьютеры. Хотя в это трудно поверить, текстовая адвенчура Zork была Fortnite-ом своего времени. Но Zork был ещё и чем-то большим. Ради портируемости и экономии пространства сам Zork был написан на Zork Implementation Language (ZIL), в котором активно использовалась совершенно новая на тот момент концепция объектно-ориентированного программирования, и выполнялся в виртуальной машине. И всё это происходило в 1979 году. Разработчики использовали всевозможные хитрости, чтобы уместить как можно бОльшую часть Подземной империи в компьютеры, имевшие всего 32 КБ ОЗУ. Однако Zork стал не только технологическим прорывом, но и большой вехой в истории компьютерных игр. При этом возник он не на пустом месте.
Читать полностью »