Обновить
165.39

Ненормальное программирование *

Извращения с кодом

Сначала показывать
Порог рейтинга
Уровень сложности

Занимательное функциональное программирование в Ruby

Время на прочтение13 мин
Просмотры10K

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

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

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

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

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

Несколько недоразумений парного программирования

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

Управление GIT-ом через веб-консоль на PHP

Время на прочтение1 мин
Просмотры9.9K
Я люблю git. Я использую его во всех своих проектах. Поэтому я решил сделать веб-консоль для управления git-ом на PHP.

Читать дальше →

God object. Анализ сложных проектов

Время на прочтение5 мин
Просмотры9K

Введение


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

MHook vs Zuma

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

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

Время на прочтение3 мин
Просмотры6.4K

Мотивация


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

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

Бобровый Утёс и другие земли Вестероса в мире Minecraft

Время на прочтение1 мин
Просмотры16K


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

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

Под катом — еще видео.
Читать дальше →

Bash: автообнаружение противника для сетевой игры на «Маках»

Время на прочтение3 мин
Просмотры1.4K
Время от времени мне нравится писать на bash какие-нибудь не слишком тривиальные вещи. Вроде сетевых шахмат, о которых я уже рассказывал на «Хабре».

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

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

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

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

FuckItJS: принудительное исполнение JavaScript-кода

Время на прочтение1 мин
Просмотры2.2K
Американский веб-разработчик Мэтт Даймонд (Matt Diamond) написал библиотеку JavaScript под названием FuckItJS. Если вставить в код метод FuckIt, то он заставит исполняться самый плохой скрипт, «нравится это компилятору или нет».

В общем, FuckItJS работает так: из скрипта вырезаются все строчки, на которые выскочили ошибки. Процесс повторяется, пока скрипт (или что там от него осталось) не проходит компиляцию без ошибок. Чтобы выжить в этом жестоком мире, FuckItJS перезагружается после каждой итерации.
Читать дальше →

Пишем эмулятор приставки ч2, или немного о CHIP16

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

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

Читать дальше →

Сбой робота на бирже ММВБ-РТС

Время на прочтение1 мин
Просмотры9.3K
Забавный случай произошёл 21 июня на срочном рынке FORTS объединенной биржи ММВБ-РТС, о нём написал в своём блоге один из участников рынка Сергей Романчук (начальник дилингового центра Металлинвестбанка). Начиная с 18:00 развернула бурную активность некая автоматизированная торговая система, которая начала с бешеной скоростью покупать фьючерсы на доллары по 33,90 руб. и продавать по 32,75 руб.

За две минуты «сумасшедший робот» успел совершить сделок на 700 млн долларов (!), пока его не остановили. Вот график сделок с 18:00 по 18:02 с нарастающим итогом по объёму. Представители биржи официально заявили, что сделки отменены не будут.


Читать дальше →

Методы, как first class citizens в C++

Время на прочтение5 мин
Просмотры4.5K
На днях, гуляя по багтрекеру gcc наткнулся на интересный баг, в нем используется сразу несколько возможностей C++11:


Анализируя этот баг, я подумал, что теперь можно удобно реализовать методы как first class citizens
Читать дальше →

Искусственный разум, интеллект, жизнь… Долго ли их еще ждать?

Время на прочтение7 мин
Просмотры2K
Боюсь, что уже дождались. По крайней мере, искусственную жизнь — так точно дождались, и даже более того. А как Вам экспансия жизни со скоростью 6 планет в час — впечатляет? Хотите узнать больше — читайте дальше.
Читать дальше →

Ближайшие события

Девушка с татуировкой ANSI

Время на прочтение2 мин
Просмотры20K
Специалисты по СУБД с сайта Oracle WTF заинтересовались, что же такое печатает в терминале юный хакер в фильме «Девушка с татуировкой дракона». По сюжету, это были запросы к базе данных полицейского отделения, с помощью которых она раскрыла убийства 40-летней давности.


Читать дальше →

look-at — менеджер фокуса

Время на прочтение2 мин
Просмотры3.5K

Что такое look-at?


Это утилита, которая переключает фокус между окнами приложений из командной строки.

Зачем?


При работе с большим количеством открытых окон часто возникает проблема с тем, чтобы быстро переключиться в окно нужного приложения. Можно, конечно, применять сочетание клавиш Alt+Tab, но Ктулху вызвать проще. Гораздо удобнее использовать шоткаты. Например, Super+1 — и вы уже работаете с терминалом, Super+2 — и перед вами Firefox. Предлагаю вашему вниманию утилиту look-at, которая даёт возможность делать это (фанаты Unity — молчать!) практически в любом десктопе, где есть X.Org.
Читать дальше →

Недуги проект-дезориентированного ПО

Время на прочтение4 мин
Просмотры4.6K
Любой знакомый с книгой о паттернах, написанной Бандой Четырёх знает, что паттерны, описанные в книге, представляют собой элегантные решения, проверенные временем. К сожалению, выделение этих паттернов из преемственного кода невозможно, потому что никто не знает, что они предложили эти паттерны, когда писали преемственный код. Поэтому следующий текст представляет из себя паттерны для широких масс. Представленные в этом документе паттерны представляют собой решения, пережившие многих. Наслаждайтесь чтением, но не используйте на практике!

Читать дальше →

Как работает приложение InstaCRT?

Время на прочтение1 мин
Просмотры2.4K
Эстетика ретро-фотографий, столь удачно продвинутая на рынок модным хипстерским приложением Instagram, не оставляет разработчиков равнодушными. И, судя по всему, привлечение пользователей к своим творениям не означает только лишь программирование и обычные приёмы маркетинга.

Некто Мартин Стром (Martin Ström), разработчик из Стокгольма, создал приложение InstaCRT для iOS, которое имеет одну функцию — наложение фильтра на изображение так, что создаётся впечатление картинки на старых ламповых чёрно-белых телевизорах.

Готовое фото выглядит так:



Однако, самое любопытное заключается не в этом, а в том, что находится «под капотом» InstaCRT. Приложение работает таким образом:
Узнать подробности

Запрограммируем вакансию

Время на прочтение1 мин
Просмотры1.7K
Неожиданно оригинальный подход я увидел тут в описании одной вакансии.

Дабы не сочли рекламой — всю инфу о работодателе выпилил.

Но за описание вакансии средствами ООП — однозначный респект!

public class JediJob extends GameDevJob implements IRemoteJob {
...

Полный исходник не влез до ката.
Читать дальше →

Сортировка в одну строку

Время на прочтение1 мин
Просмотры2.4K
Имеем обычный «пузырек»:
for(int i = 0; i < n - 1; i++ )
	  for(int j = i + 1; j < n; j++)
	   if(ar[i] > ar[j])
	   {
		 int temp = ar[i];
		 ar[i] = ar[j];
		 ar[j] = temp; 
	   }


Задача №1: Избавиться от временной переменной. Делается это вот таким макаром:
Читать дальше →

Entropy — Неточный язык программирования

Время на прочтение2 мин
Просмотры4.9K
В комментариях к недавнему посту про неточный процессор, хабраюзер lol2Fast4U привел ссылку на интересный язык программирования — Entropy.

Суть этого языка в том, что в нем отсутствует детерминированность.

Каждый раз, когда мы обращаемся к каким-либо данным, они искажаются все больше и больше.

Казалось бы, смысл создания этого языка — весьма сомнителен. Но на деле, этот подход может быть полезным для эмуляции как раз тех самых неточных процессоров, о которых идет речь в вышеуказанном посте.

Сами понимаете, что подход к программированию в такой среде должен быть принципиально иным.
Читать дальше →

Вклад авторов