В последнее время, как мне кажется, пластиковые рудники на грани истощения. Чем больше и тяжелее монитор, тем меньше и тоньше подставка. Так 23'' монитор Samsung постигла участь одуванчика. Случайно наткнулся, в одной из местных news групп, на способ восстановления пластика при помощи пищевой соды. Под катом ремонт стойки монитора.
Павел Т @kefirr
Ignite.NET maintainer
Не нужно обижать «матрас»
7 min
7.4K
Желаю доброго дня уважаемому Хабра-сообществу. Данная заметка навеяна постом о правильной настройке телевизора. Я не лелею больших надежд на то, что внезапно начнется «неделя настройки телевизоров на Хабре», но поделиться некоторыми мыслями захотелось.
Обращаю ваше внимание на тот факт, что автор не является профессионалом в области ремонта/настройки телевизионных приемников, мониторов и другого проекционного оборудования, а все изложенные мысли лишь теоретические выкладки, с которыми более опытные товарищи могут легко не согласиться и отразить свое негодование в комментариях. За что, кстати, я буду весьма благодарен, ибо это может серьезно расширить мой кругозор.
+47
Очевидные 3 правила безопасности
2 min
66KПравило №1. Делайте все авторизационные куки HttpOnly
Куки с флагом HttpOnly не видны браузерному коду, а отправляются только на сервер. На практике у вас почти никогда нет необходимости получать их содержимое со стороны клиента (если такая необходимость почему-то у вас возникла — пересмотрите архитектуру авторизации, скорее всего, там что-то не так). А вот злоумышленнику, нашедшему XSS — а XSS так или иначе когда-нибудь где-нибудь найдется — отсутствие HttpOnly на авторизационных куках доставит много радости.
+107
Valve: как я здесь оказался, на что это похоже и чем я здесь занимаюсь
14 min
64KTranslation
Автор оригинальной статьи — Майкл Эбраш, человек и пароход. Для тех, кому лень изучать википедию, отмечу, что это программист с более чем 30-летним стажем работы, который в свое время помог Кармаку сделать Quake, разработал GDI для Windows NT, приложил руку к созданию первых двух версий Xbox, а сейчас работает в R&D-отделе компании Valve.
В своей заметке он вспоминает, как зарождалась индустрия 3D-игр вообще и Valve в частности, рассказывает про свой опыт работы в различных корпорациях, приоткрывает завесу внутренней кухни Valve и ищет новых сотрудников. Статья большая, и я посчитал ее достаточно интересной для того, чтобы перевести на хабр.
Всё началось с Лавины*.
Если бы я не прочел её и не влюбился в идею Метавселенной, если бы она не заставила меня представить, насколько распределенная 3D сеть близка к воплощению в жизнь, если бы я не подумал я могу сделать это и, что более важно, я хочу сделать это, я бы никогда не встал на путь, который в конечном счете привел меня в Valve.
В 1994 году я уже несколько лет как работал на Microsoft. Однажды вечером, когда моя дочка рассматривала книги в магазине Little Professor в Sammamish Plateau, мне посчастливилось заметить Лавину на полке. Я взял книжку, прочитал первые страницы, решил купить и в итоге проглотил её за день. Параллельно я начал задумываться о том, что 80 процентов описанного в ней осуществимо прямо сейчас, и мне захотелось реализовать это сильнее, чем когда-либо вообще хотелось сделать что-то с компьютером — я всю жизнь читал научную фантастику, и вдруг мне выпал шанс превратить её в реальность. Так я попытался начать в Microsoft проект по созданию технологии сетевого 3D.
В своей заметке он вспоминает, как зарождалась индустрия 3D-игр вообще и Valve в частности, рассказывает про свой опыт работы в различных корпорациях, приоткрывает завесу внутренней кухни Valve и ищет новых сотрудников. Статья большая, и я посчитал ее достаточно интересной для того, чтобы перевести на хабр.
Всё началось с Лавины*.
Если бы я не прочел её и не влюбился в идею Метавселенной, если бы она не заставила меня представить, насколько распределенная 3D сеть близка к воплощению в жизнь, если бы я не подумал я могу сделать это и, что более важно, я хочу сделать это, я бы никогда не встал на путь, который в конечном счете привел меня в Valve.
В 1994 году я уже несколько лет как работал на Microsoft. Однажды вечером, когда моя дочка рассматривала книги в магазине Little Professor в Sammamish Plateau, мне посчастливилось заметить Лавину на полке. Я взял книжку, прочитал первые страницы, решил купить и в итоге проглотил её за день. Параллельно я начал задумываться о том, что 80 процентов описанного в ней осуществимо прямо сейчас, и мне захотелось реализовать это сильнее, чем когда-либо вообще хотелось сделать что-то с компьютером — я всю жизнь читал научную фантастику, и вдруг мне выпал шанс превратить её в реальность. Так я попытался начать в Microsoft проект по созданию технологии сетевого 3D.
+218
Форд, Тойота и морские свинки
17 min
20K — Какое отношение имеет морская свинка к морю?
— Примерно такое же, как утконос к проектированию дирижаблей.
Я имею обыкновение во время прогулок прокручивать информацию из нескольких источников, сопоставляя куски. Одна из любопытных находок – почти полное соответствие статистических наблюдений Демарко и Листера в «Peopleware» и теоретических выкладок Голдратта в «Критической цепи».
Осенью 2011 я крутил в голове:
[1] «Стоя на плечах гигантов» Эли М. Голдратт © Eliyahu M. Goldratt, 2008
[2] «Производственный менеджмент: управление потоком» Одед Коуэн, Елена Федурко
[3] «История одной доски» (http://cartmendum.livejournal.com/tag/theboard).
Далее хотелось бы написать: «Как вдруг…», — но это будет неправдой. Это случилось не вдруг. Мне понадобилось пару недель, но, в конце концов, в голове сложилась достаточно цельная картинка.
За что именно я зацепился:
— Примерно такое же, как утконос к проектированию дирижаблей.
Введение.
Я имею обыкновение во время прогулок прокручивать информацию из нескольких источников, сопоставляя куски. Одна из любопытных находок – почти полное соответствие статистических наблюдений Демарко и Листера в «Peopleware» и теоретических выкладок Голдратта в «Критической цепи».
Осенью 2011 я крутил в голове:
[1] «Стоя на плечах гигантов» Эли М. Голдратт © Eliyahu M. Goldratt, 2008
[2] «Производственный менеджмент: управление потоком» Одед Коуэн, Елена Федурко
[3] «История одной доски» (http://cartmendum.livejournal.com/tag/theboard).
Далее хотелось бы написать: «Как вдруг…», — но это будет неправдой. Это случилось не вдруг. Мне понадобилось пару недель, но, в конце концов, в голове сложилась достаточно цельная картинка.
За что именно я зацепился:
- Таичи Оно (Öno Taiichi) не понимал, почему его система работает.
- Существует несколько разных типов производственных потоков – V, A, T, I. Каждый тип потока ставит особые задачи.
- Неудачи внедрения доски Максима Дорофеева в некоторых подразделениях
- Ряд компаний не смог внедрить систему Тойота, несмотря на все приложенные усилия.
- Система Тойота и система Форда основывается на одинаковых принципах, но прикладные решения ограничены определенными типами производства.
+80
Квадрокоптер за 1 день и $120
8 min
350KСоздать квадрокоптер как платформу для летающего робота я планирую уже очень давно. Первые расчеты и заказ деталей я сделал год еще назад. Однако, делать «просто коптер» чтобы полетать, управляя с пультом или даже в FPV режиме конечной задачей не является. Поэтому коптер должен быть максимально гибким и как можно менее дорогим.
По отдельности все детали для коптера есть, но их сопряжение — дело простое только в теории. Нужно быть и программистом и инженером и моделистом — вертолетчиком. Поэтому процесс движется довольно небыстро. А летать хочется :) Ничто так не расхолаживает и не демотивирует как отсутствие видимых результатов, особенно когда прогресс-то вроде есть, но не наглядный. Да и экспериментировать сразу на большом квадракоптере дорого и опасно.
Поэтому я решил собрать для экспериментов миникоптер. Как всегда — задача сделать недорого, просто и гибко.
Мой результат — готовый коптер за 1 день (на сборку и запуск) и $120 (стоимость квадрокоптера включая доставку). А с аппаратурой — $145.

«MiniQuadroCopter»
Под катом описание и видео.
Buddy-коды для заказа на HobbyKing
По отдельности все детали для коптера есть, но их сопряжение — дело простое только в теории. Нужно быть и программистом и инженером и моделистом — вертолетчиком. Поэтому процесс движется довольно небыстро. А летать хочется :) Ничто так не расхолаживает и не демотивирует как отсутствие видимых результатов, особенно когда прогресс-то вроде есть, но не наглядный. Да и экспериментировать сразу на большом квадракоптере дорого и опасно.
Поэтому я решил собрать для экспериментов миникоптер. Как всегда — задача сделать недорого, просто и гибко.
Мой результат — готовый коптер за 1 день (на сборку и запуск) и $120 (стоимость квадрокоптера включая доставку). А с аппаратурой — $145.

«MiniQuadroCopter»
Под катом описание и видео.
Buddy-коды для заказа на HobbyKing
+145
Набор полезных утилит и библиотек мира .NET
2 min
4.9KДовольно часто так бывает что кто-то когда-то сделал прекрасную вещь, а она либо никем так и не была найдена, либо быстро забыта. Потихоньку я буду стараться предоставлять в серии топиков информацию по различным проектам, на которые стоит обратить внимание. Многие из них специфичны. И тем еще более интересны.

IL заглушки (stubs) динамически генерируются во время работы приложения на лету и управляют маршаллингом и вызовом целевого метода. IL Stub Diagnostic tool была создана чтобы улучшить качество отладки приложений. Это real-time монитор, который показывает детали каждой IL заглушки, создаваемой в исследуемом процессе. Для каждой заглушки утилита показывает ее IL код и сигнатуры Managed/Unmanaged методов
IL Stub Diagnostic Tool

IL заглушки (stubs) динамически генерируются во время работы приложения на лету и управляют маршаллингом и вызовом целевого метода. IL Stub Diagnostic tool была создана чтобы улучшить качество отладки приложений. Это real-time монитор, который показывает детали каждой IL заглушки, создаваемой в исследуемом процессе. Для каждой заглушки утилита показывает ее IL код и сигнатуры Managed/Unmanaged методов
+36
WPF: Несколько параметров для конвертера
4 min
17KВ первой своей статье, посвящённой конвертерам, я описал способ использование конвертеров в качестве расширения разметки. Продолжая тему конвертеров, хотелось бы рассказать о параметрах конвертера.
+11
Войны в песочнице – Часть 3. ARP-Spoofing, бесполезность фильтрации по MAC-адресу и опасность установки неподписанного ПО
9 min
44K
Прошло чуть более года с момента публикации предыдущих статей (1, 2), и только недавно обстоятельства сложились так, что у меня появился повод для проведения новой атаки.
В этот раз физического доступа к сетевой инфраструктуре нет. Есть лишь ноутбук с доступом в интернет по Wi-Fi. Жертва – сосед по общежитию — подключена к другой точке доступа (DIR-320) по Ethernet, но пароль для подключения к точке известен почти всем, т.к. её хозяин предпочитает использовать в качестве средства разграничения доступа фильтрацию по MAC-адресам, добавляя и удаляя адреса из базы по мере необходимости. Моего MAC-адреса в списке разрешенных нет.
Ок, подключаемся, делаем несколько тестов, и видим, что фильтрация MAC-адресов происходит только на сетевом уровне, то есть точка доступа не отказывается:
- пересылать мои фреймы в Ethernet сегмент, и доставлять ответы
- отвечать на ARP-запросы и принимать ARP-ответы
Единственное что точка доступа отказывается делать, так это взаимодействовать с чужаком на сетевом уровне, то есть IP-адрес она мне через DHCP не выдаёт, пропинговать её нельзя и в интернет через неё тоже не выйти.
+85
Такси Джет – каждый водитель каждому пассажиру
4 min
1.3K
«Назвать себя К. не решался, перед телефоном он чувствовал себя беспомощным, на него могли наорать, бросить трубку; К. закрыл себе немаловажный путь. Нерешительность К. раздражала его собеседника. «Кто говорит? — повторил он и добавил: — Я был бы очень обязан, если бы оттуда меньше звонили, только что нас уже вызывали»».
Картина не очень-то похожа на нашу повседневную жизнь, тем более что телефоном приходится пользоваться всё реже. Однако, если вы захотите вызвать такси, воспользоваться придётся. И хорошо, если вы знаете номера пары-тройки проверенных таксофирм, но в час пик и это может не сработать, к тому же от разговора с диспетчером никак не отвертеться – и вот опять: адрес подачи, пункт назначения, повторите, плохо слышно, через сколько приедет, сколько стоит и прочее. Благо существуют мобильные технологии, которые уже спешат избавить нас от подобных неудобств.
+21
«Движущиеся фото» от Microsoft Research
1 min
8.6KИсследовательское подразделение Microsoft Research выпустило любопытное ПО Cliplets для создания фото, отдельные объекты на котором могут двигаться — такие фото в интернете называют синемаграфами (cinemagraphs). В целом, идея похожа на старую GIF-анимацию, за исключением того, что фото получается гораздо более интересным и детальным. В данном случае Cliplets предлагает выбрать объект на некотором видео, последовательные кадры которого анализируются, чтобы в итоге и получить готовую «синемаграфию».
Такая же функциональность присутствует в iOS-приложении Cinemagram, хотя в данном случае Cliplets работает, понятное дело, на Windows и бесплатна.
Видео работы с Cliplets
Скачать Cliplets можно тут.
Такая же функциональность присутствует в iOS-приложении Cinemagram, хотя в данном случае Cliplets работает, понятное дело, на Windows и бесплатна.
Видео работы с Cliplets
Скачать Cliplets можно тут.
+70
Восстановление расфокусированных и смазанных изображений
10 min
226KВосстановление искаженных изображений является одной из наиболее интересных и важных проблем в задачах обработки изображений – как с теоретической, так и с практической точек зрения. Частными случаями являются размытие из-за неправильного фокуса и смаз – эти дефекты, с которым каждый из вас хорошо знаком, очень сложны в исправлении – именно они и выбраны темой статьи. С остальными искажениями (шум, неправильная экспозиция, дисторсия) человечество научилось эффективно бороться, соответствующие инструменты есть в каждом уважающем себя фоторедакторе.
Почему же для устранения смаза и расфокусировки практически ничего нету (unsharp mask не в счет) – может быть это в принципе невозможно? На самом деле возможно – соответствующий математический аппарат начал разрабатываться примерно 70 лет назад, но, как и для многих других алгоритмов обработки изображений, все это нашло широкое применение только в недавнее время. Вот, в качестве демонстрации вау-эффекта, пара картинок:

Я не стал использовать замученную Лену, а нашел свою фотку Венеции. Правое изображение честно получено из левого, причем без использования ухищрений типа 48-битного формата (в этом случае будет 100% восстановление исходного изображения) – слева самый обычный PNG, размытый искусственно. Результат впечатляет… но на практике не все так просто. Под катом подробный обзор теории и практические результаты.
Осторожно, много картинок в формате PNG!
Почему же для устранения смаза и расфокусировки практически ничего нету (unsharp mask не в счет) – может быть это в принципе невозможно? На самом деле возможно – соответствующий математический аппарат начал разрабатываться примерно 70 лет назад, но, как и для многих других алгоритмов обработки изображений, все это нашло широкое применение только в недавнее время. Вот, в качестве демонстрации вау-эффекта, пара картинок:

Я не стал использовать замученную Лену, а нашел свою фотку Венеции. Правое изображение честно получено из левого, причем без использования ухищрений типа 48-битного формата (в этом случае будет 100% восстановление исходного изображения) – слева самый обычный PNG, размытый искусственно. Результат впечатляет… но на практике не все так просто. Под катом подробный обзор теории и практические результаты.
Осторожно, много картинок в формате PNG!
+287
Tower Defense + Box2D
4 min
11KЕсли бы вы писали Tower Defense игру, пришло бы ли вам на ум воспользоваться для этого физическим движком, например Box2D? Как бы вы реализовали движение юнитов, поведение башен? Что еще полезного вы бы извлекли из физического движка в такой игре?

Над этими и другими вопросами я начал думать несколько месяцев назад, в результате чего родилась довольно таки интересная игра.

Над этими и другими вопросами я начал думать несколько месяцев назад, в результате чего родилась довольно таки интересная игра.
+45
Моделирование большого количества взаимодействующих друг с другом частиц
6 min
30KTutorial
Рассмотрим ситуацию, когда необходимо обрабатывать столкновения между объектами. Как вы в этом случае поступите? Вероятно, самым простым решением будет проверить каждый объект с каждым другим объектом. И это правильное решение, и все будет замечательно до тех пор пока объектов не много. Как только их станет порядка нескольких тысяч, вы заметите, что все стало как-то медленно работать. А если частиц несколько десятков тысяч или сотен? Тогда все замрет. Вот здесь уже интересно, на какие хитрости и оптимизации вы пойдете, чтобы решить такую проблему.
Для простоты, будем рассматривать 2D случай, частицы круглые, радиус частиц у всех одинаковый.
1. Обзор алгоритмов
1.1. Полный перебор
1.2. Sweep & Prune
1.3. Регулярная сеть
2. Некоторые оптимизации
2.1. Sweep & Prune
2.2. Регулярная сеть
3. Сравнение скорости выполнения
4. Приложение (программа и исходный код)
5. Заключение
Для простоты, будем рассматривать 2D случай, частицы круглые, радиус частиц у всех одинаковый.
Содержание
1. Обзор алгоритмов
1.1. Полный перебор
1.2. Sweep & Prune
1.3. Регулярная сеть
2. Некоторые оптимизации
2.1. Sweep & Prune
2.2. Регулярная сеть
3. Сравнение скорости выполнения
4. Приложение (программа и исходный код)
5. Заключение
+143
The Art of Unit Testing
4 min
58K
Есть некоторые категории знаний, которые профессиональный разработчик познает в процессе своей работы, не прилагая к этому особенных дополнительных усилий. Вот, например, мало кто из нас читал замечательную книгу по регулярным выражениям Джеффри Фирддла, чтобы познакомиться с одноименной темой. Безусловно, есть масса людей, для которых «регвыры» стали смыслом жизни и без подобных фундаментальных знаний никак не обойтись. Но в большинстве случаев пары мелких статей и справки в соответствующем разделе документации будет достаточно для более или менее комфортной работы с регулярными выражениями (если такое понятие, как «комфортная работа» с регулярными выражениями вообще существуетJ).
Аналогичным образом мы обычно относимся и к изучению юнит тестирования. Ведь юнит-тесты – это же не rocket science; для их изучения не требуется многолетняя подготовка и множество бессонных ночей проведенных за изучением толстенных «талмудов» от гуру юнит-тестирования. Концепцию автоматизированного тестирования кода можно объяснить за 10 минут, а познакомившись с одним из тестовых фреймворков семейства xUnit (еще 15 минут), вы сможете работать с любым другим фреймворком практически сразу же. Затем нужно будет потратить еще 20 минут на изучение какого-нибудь изоляционного фреймворка, типа Rhino Mocks, и, вуаля, у нас есть еще один профессионал в области юнит-тестов.
+26
Когда использовать Parallel.ForEach, а когда PLINQ
13 min
78KTranslation
Введение
Обычно, при оптимизации программы для многоядерных компьютеров первым шагом является выяснение возможности разделения алгоритма на части, выполняющиеся параллельно. Если для решения задачи необходимо параллельно обрабатывать отдельные элементы из большого набора данных, то первыми кандидатами станут новые возможности параллельности в .NET Framework 4: Parallel.ForEach и Parallel LINQ (PLINQ)
Parallel.ForEach
Класс Parallel содержит метод ForEach, представляющий собой многопоточную версию обычного цикла foreach в C#. Подобно обычному foreach, Parallel.ForEach выполняет итерации над перечислимыми данными (enumerable), но с использованием множества потоков. Одна из более часто используемых перегрузок Parallel.ForEach выглядит следующим образом:
public static ParallelLoopResult ForEach<TSource>(
IEnumerable<TSource> source,
Action<TSource> body)
Ienumerable указывает на последовательность, по которой нужно выполнить итерации, а Action body задает делегат, вызываемый для каждого элемента. Полный список перегрузок Parallel.ForEach можно найти здесь.
PLINQ
Родственный с Parallel.ForEach PLINQ представляет собой модель программирования для паралелльных операций над данными. Пользователь определяет операцию из стандартного набора операторов, включающих в себя проекции, фильтры, агрегирование и т.д. Подобно Parallel.ForEach PLINQ достигает параллельности, разбивая входную последовательность на части и обрабатывая элементы в разных потоках.
В статье выделяются различия между этими двумя подходами к параллельности. Разбираются сценарии использования, в которых лучше всего использовать Parallel.ForEach вместо PLINQ и наоборот.
Выполнение независимых операций
+67
Объявлены 6 стартапов, которые получат гранты от Мильнера и Дурова
1 min
1.3KТри недели назад на хабре уже писали о том, что Мильнер и Дуров будут раздавать гранты в размере 25 тысяч долларов, при этом не требуя ничего взамен.
И вот сейчас в группе проекта StartFellows были объявлены 6 стартапов, которые получат этот грант:
vnimanietv.ru — премия в области образовательных видеолекций;
budist.ru — социальный будильник;
sandsign.ru — подписи на песке;
wheely.com — сервис для заказа и отслеживания такси;
tjournal.ru — газета, построенная на автоматическом анализе русскоязычной аудитории Твиттера;
drugdrugu.ru — социальная сеть, сведение людей по принципу «Я хочу/Я могу».
Сообщается, что было прислано около 2000 писем и не все заявки ещё обработаны.
Судя по первым победителям, предпочтение отдаётся живым проектам.
И вот сейчас в группе проекта StartFellows были объявлены 6 стартапов, которые получат этот грант:
vnimanietv.ru — премия в области образовательных видеолекций;
budist.ru — социальный будильник;
sandsign.ru — подписи на песке;
wheely.com — сервис для заказа и отслеживания такси;
tjournal.ru — газета, построенная на автоматическом анализе русскоязычной аудитории Твиттера;
drugdrugu.ru — социальная сеть, сведение людей по принципу «Я хочу/Я могу».
Сообщается, что было прислано около 2000 писем и не все заявки ещё обработаны.
Судя по первым победителям, предпочтение отдаётся живым проектам.
+69
Джон Кармак о статическом анализе кода
4 min
14K«Самой важной вещью, которую я сделал как программист за последние годы — это начал агрессивно применять статический анализ кода. — пишет Джон Кармак в статье, опубликованной на AltDevBlogADay. — Не так важны сотни серьёзных багов, которые удалось предотвратить, сколько смена ментальности и моего отношения к надёжности ПО и качеству кода».
Джон Кармак рассказывает о различных инструментах, которые пытался использовать в течение своей карьеры и о тех выводах, к которым пришёл в итоге.
Джон Кармак рассказывает о различных инструментах, которые пытался использовать в течение своей карьеры и о тех выводах, к которым пришёл в итоге.
+62
LG SMART TV (обзор, вопросы, о контенте)
4 min
186KВступление
Привет, Хабр! Здравствуйте, друзья!
Тема этого поста – «умное телевидение» или Smart TV. Краткий, но емкий обзор, что у нас есть уже сейчас и что будет в ближайшем будущем.

Краткое содержание поста:
1. LG Smart TV в двух словах – что это, что есть в LG Smart TV в России.
2. Особенности платформы LG Smart TV, чем мы отличаемся от конкурентов.
3. Типы сервисов, доступных на телевизорах уже сейчас.
Интересно? Читаем дальше --->
Привет, Хабр! Здравствуйте, друзья!
Тема этого поста – «умное телевидение» или Smart TV. Краткий, но емкий обзор, что у нас есть уже сейчас и что будет в ближайшем будущем.

Краткое содержание поста:
1. LG Smart TV в двух словах – что это, что есть в LG Smart TV в России.
2. Особенности платформы LG Smart TV, чем мы отличаемся от конкурентов.
3. Типы сервисов, доступных на телевизорах уже сейчас.
Интересно? Читаем дальше --->
+4
Паттерн Visitor. Продвинутое использование
7 min
49KЗдравствуйте, дорогие хабравчане!
Я хочу поделиться с вами своим опытом использования паттерна проектирования visitor и его интересной модификацией, которую я назвал upcast visitor. К сожалению, непросто придумать простой короткий пример и описать как все работает, также эта статья может показаться сложной для начинающих, тем не менее я постараюсь максимально упростить задачу. Примеры кода приведены на языке С++ и обязательны к прочтению. Без понимания кода вникнуть в суть статьи будет затруднительно.
Представьте, что мы проектируем 2D игру, в которой фрукты падают с дерева, по пути ударяясь о ветки. Цель игры — поймать все фрукты, двигая корзину под деревом.
Строим следующую диаграмму классов:
Я хочу поделиться с вами своим опытом использования паттерна проектирования visitor и его интересной модификацией, которую я назвал upcast visitor. К сожалению, непросто придумать простой короткий пример и описать как все работает, также эта статья может показаться сложной для начинающих, тем не менее я постараюсь максимально упростить задачу. Примеры кода приведены на языке С++ и обязательны к прочтению. Без понимания кода вникнуть в суть статьи будет затруднительно.
Предыстория
Представьте, что мы проектируем 2D игру, в которой фрукты падают с дерева, по пути ударяясь о ветки. Цель игры — поймать все фрукты, двигая корзину под деревом.
Строим следующую диаграмму классов:
+52
Information
- Rating
- Does not participate
- Registered
- Activity