Рубрика «ненормальное программирование» - 118

Если вы когда-нибудь писали приложение на Objective-C, вы должны быть знакомы с классом NSNumber — оберткой, превращающей число в объект. Классический пример использования — это создание числового массива, заполненного объектами вида [NSNumber numberWithInt:someIntValue];.

Казалось бы, зачем создавать целый объект, выделять под него память, потом ее чистить, если нам нужен обычный маленький int? В Apple тоже так подумали, и потому NSNumber — это зачастую совсем не объект, и за указателем на него скрывается… пустота.

Если вам интересно, как же так получается, и при чем тут меченые указатели — добро пожаловать под кат!
Читать полностью »

Занимательное функциональное программирование в Ruby
Эта статья посвящена бесцельному путешествию по вырожденной форме Ruby в попытках узнать больше о функциональном программировании, простоте и дизайне программных интерфейсов.

Предположим, что единственный способ представления кода — лямбда-выражение, а единственная доступная структура данных — массив:

square = ->(x) { x * x }
square.(4) # => 16

person = ["Dave",:male]
print_person = ->((name,gender)) {
  puts "#{name} is a #{gender}"
}
print_person.(person)

Это самые основы функционального программирования: функции — единственное, что у нас есть. Давайте попробуем написать что-то более похожее на реальный код в таком же стиле. Посмотрим, как далеко мы сможем зайти без особых мучений.
Читать полностью »

У меня достаточно много опыта в программировании, накопленного за последние несколько лет. Часть опыта я приобрёл работая в своей команде, что-то при работе с клиентам, а некоторый опыт появился благодаря coding dojo и работе на open source проектах.
Для программистов знающих как использовать парное программирование оно предоставляет возможность улучшить свою производительность. Но при этом не стоит ожидать, что программисты значительно улучшат свою производительность с самого начала работы. Парное программирование требует постоянного обучения, а также осознания самими программистами чёткой разницы между исполнителем (тот кто стучит по клавиатуре), и штурманом. Ниже приведено более детальное описание.
Читать полностью »

Я люблю git. Я использую его во всех своих проектах. Поэтому я решил сделать веб-консоль для управления git-ом на PHP.
Управление GIT ом через веб консоль на PHP
Читать полностью »

Введение

Ни для кого не секрет, что такой архитектурный антипаттерн как God object препятствует эффективному поддерживанию кода проекта. Однако его все равно можно встретить в Legacy-системах корпоративного сектора. Со временем код становится настолько сложным, что изменить его функциональность, даже при наличии Unit-тестирования, становится большой проблемой. Такие системы никто не хочет поддерживать, все боятся что-либо улучшать, количество проблем в трекере держится постоянным числом, но может и расти. Как правило, у команды упавшее настроение, которое со временем становится чемоданным: все хотят свалить.
Иллюстрация проблемы
Читать полностью »

MHook vs ZumaТут не совсем про зуму, и не совсем про mhook. Дело в том, что я сделал небольшую обертку над mhook (чтобы помочь своему труду), хотел бы показать что получилось, как я его использую, и получить немного конструктивной критику. А чтобы не использовать синтетических примеров, пойду по накатанной, и поиздеваюсь над zuma. Рассказывать я буду в такой последовательности: сначала пара слов (действительно мало) о том как перехватывает mhook, потом немного о том как я это использовал, затем опишу что я все-таки сделал, и закончу тем, что вживлю пару электродов в любимую жабку. Так что сами можете решать что вам интересно, и соответственно, с чего начинать читать.
Читать полностью »

Реверс инжинирим игру Hogs of War, часть 1

Мотивация

В связи с испорченным местными властями отпуском приходится занимать свое время чем-нибудь интересным. Например, подлечить старую игрушку, косяки которой не позволяют нормально поиграть на современных ОС, либо поменять несколько байтов для получения разных extra-возможностей just for fun. Подопытным будет игра из далекого 2000 года под названием Hogs of War. Если кто не знает, то это turn-based стратегия, где вам дается команда хрюшек, с помощью которых вы должны ни много ни мало, завоевать мир. В процессе игры в зависимости от результатов можно модифицировать каждую хрюшку, например повысив её в звании. В 2009 Atari объявила о продолжении игры в виде разработки HOW2, но по последним данным проект свернули из-за недостатка финансирования. Ничего приятного.

Цель этой части: исправление бага, при котором блокируется весь рабочий стол, если произошел appcrash по какой-либо причине и подготовка приложения для работы в экранном режиме для упрощения отладки.
Читать полностью »

Ребята с сайта mc.westeroscraft.com/ воссоздают в мире Minecraft земли Семи Королевств (Game of Thrones).

Пока информации как таковой на сайте довольно мало (в основном — видео созданных земель, ну и адрес сервера посмотреть можно, mc.westeroscraft.com), но я считаю, пост имеет смысл, дабы просто показать это. Всегда удивлялся терпению и усидчивости подобных людей.

Под катом — еще видео.
Читать полностью »

Bash: автообнаружение противника для сетевой игры на «Маках» Время от времени мне нравится писать на bash какие-нибудь не слишком тривиальные вещи. Вроде сетевых шахмат, о которых я уже рассказывал на «Хабре».

Недавно я мысленно вернулся к ним и подумал как было бы круто, если игра сама находила бы партнёра для игры в сети. Т.е. будучи запущенной, игрушка должна как-то поискать в сети тех, кто готов к поединку.

Сканировать вообще все адреса невозможно долго. Есть два некрасивых решения «в лоб» — просканировать текущую подсеть или посмотреть в таблицу ARP, подсоединиться к тем, кто там есть. Но, во-первых, такой перебор всё равно будет медленным, а во-вторых, не найдёт всех потенциальных соперников (соперники могут быть в других подсетях, а в таблице ARP вообще далеко не все участники сети).

Вообще, подобная проблема давным-давно решена в операционках — например, когда я настраивал дома сетевой принтер, операционная система нашла его сама, я не указывал IP или что-то ещё. В «Маках» для этого есть технология «Бонжур» (реализация «Зероконфа»).

Нельзя ли использовать эту технологию в «Баше»? Читать полностью »

В предыдущей своей небольшой заметке я описывал принцип построения эмулятора старой игровой платформы CHIP-8 из далеких 70-х. Здесь же речь пойдет о своего рода наследнице – CHIP16. Итак, что же такое CHIP16?

Пишем эмулятор приставки ч2, или немного о CHIP16 CHIP16 – “вымышленная” игровая приставка, которой никогда не существовало в “железе”. Всю спецификацию на нее разрабатывали (-ют) энтузиасты с одного англоязычного форума. Смысл в том, чтобы максимально упростить написание эмулятора, иметь хорошую документацию и поддержку комьюнити. Тем самым позволяя даже новичкам в программировании создать полностью рабочий эмулятор с нуля на фактически любом языке программирования. Сразу оговорюсь, что здесь я не буду приводить примеры кода эмулятора, цель – просто рассказать об этой платформе. И да, конечно все Just for fun!

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js