Pull to refresh
1
0
Send message

Пишу игрушечную ОС (о реализации мьютекса)

Reading time4 min
Views27K

Продолжаю блог о разработке игрушечной ОС (предыдущие посты: раз, два, три). Сделав паузу в кодировании (майские праздники, всё-таки), продолжаю работу. Только что набросал сканирование PCI-шины. Эта штука понадобится для работы с SATA-контроллером: следующее, что хочу сделать — это простенький драйвер диска. Он позволит поэкспериментировать с проецированием постоянной памяти на адресное пространство (своппинг, доведённый до логического конца). А пока хотел бы описать реализацию мьютекса.
Читать дальше →
Total votes 70: ↑63 and ↓7+56
Comments11

Путешествия во времени и программирование 2: парадоксы

Reading time26 min
Views216K


Эпоха путешествий во времени еще не наступила, а человечество уже давно пытается разрешить сопутствующие им парадоксы. Мы поговорим о самом очевидном из них: что же все-таки произойдет при вмешательстве в ход истории? Существует несколько вариантов того, как поток времени реагирует на действия путешественника из будущего. Эти модели можно увидеть в фантастических фильмах, о них все больше начинают говорить ученые, но какая модель ближе к истине — единого мнения пока нет. Мы только начинаем проникать в тайны времени, и еще не обладаем возможностью экспериментировать с перемещениями в прошлое. Что же можно прояснить в данном вопросе уже сейчас? Под катом нас ждет экскурсия по основам механики времени, мы порассуждаем о парадоксах, и проведем небольшой эксперимент. Да, это будет испытание виртуальной машины времени, построенной на основе алгоритма «Жизнь»!
Читать дальше →
Total votes 371: ↑351 and ↓20+331
Comments440

Чёрный список 2.0, теперь с уголовными наказаниями

Reading time5 min
Views102K
Великий китайский файрвол — сидит 10 миллионов китайцев и фильтруют пакеты.
Великий русский файрвол — сидит 10 миллионов русских.
Именно эту мрачную шутку, которую огласили на Linux.org.Ru 16 декабря 2010 года, приходится вспомнить нынешнею весною. Из-за длинных праздников в начале мая сообществом Хабрахабра совершенно была проигнорирована статья «Кремль введёт уголовное наказание за "вредоносный" контент в Интернете», появившаяся 29 апреля в «Известиях». Меж тем статья эта, несомненно, заслуживает обсуждения: в ней сообщают, что администрация Президента прямо сейчас деятельно готовится ко внесению в Госдуму пакета поправок в законодательство, так что к существующей возможности блокировки сайтов за пропаганду «экстремизма», «детской порнографии», «наркотиков» и «самоубийств» будут добавлены новые меры — крупные штрафы и лишение свободы (тюремное заключение).

Термины «экстремизм», «детская порнография», «наркотики» и «самоубийства» приходится брать в кавычки. Все мы поневоле стали живыми свидетелями того, как за «наркотики» закрыли сайт про игру EVE Online (где описывалось применение вымышленных химических веществ к вымышленным персонажам), за «самоубийство» — безобидный юмор наподобие статьи из Абсурдопедии или творчества Каганова (а в так называемом реальном мире под предлогом детского самоубийства изымают из продажи мангу «Death Note» в Свердловской области, хотя там вся область названа в честь одного из организаторов убийства детей Императора, но это никого не волнует), за «экстремизм» — национально-таргетированную антиалкогольную пропаганду (№1568 в федеральном Списке экстремистских материалов). Что же касается «детской порнографии» (на самом деле предназначенной для вполне взрослых педофилов), то необходимость борьбы с её потреблением в Интернете (вместо борьбы с её производством в реальном мире, неизбежно связанным с реальным растлением реальных детей, для которого нелицензионные раздачи в Интернете как раз представляют собою прямую экономическую угрозу, лишают финансирования) является не совершенно очевидною — а вопрос, заданный об этом министру, оказался проигнорированным.

Истошные вопли негодования, вызванные закрытием нескольких сайтов по небесспорным основаниям, остались без ответа. Раскрутка маховика репрессий продолжается — теперь закрывать станут не только сайты, но и людей. К чему это приведёт? Думаю, что продолжится преследование вымышленных произведений, подобных вышеперечисленным случаям фантастической «наркомании» и нарисованного «суицида». Об этом можно успешно догадываться не только посредством экстраполяции совершившихся событий, но также и через проведение аналогии с зарубежьем. Старожилы Хабрахабра наверняка припомнят, что последствия произвольного и непубличного пополнения чёрного списка (содержимое которого скрывают от общества под предлогом непропагандирования) я обсуждал на Хабрахабре ещё летом 2009 года на примере Австралии. И сбылось, хотя и не в полном объёме. А теперь о том, как может выглядеть подобный произвол, когда он начинает прибегать к реальным тюремным срокам, предлагаю поглядеть на примере другой страны Южного полушария — Новой Зеландии. Там лишь недавно вышел из тюрьмы (но всё ещё находится под угрозой десяти лет условного срока) гражданин, выложивший в Интернете всего-навсего аниме о половой жизни вымышленных (и лишь частично человекоподобных) персонажей — эльфов и фей, которые благодаря особенностям японской анимации (крупные глаза, крупные головы и проч.) и особенностям японской озвучки (тонкие голоса, яркие эмоции) показались экспертам «похожими на детей».

Читать дальше →
Total votes 229: ↑197 and ↓32+165
Comments253

Игровая механика: давайте разберём ядро игры по косточкам

Reading time11 min
Views114K
Термин «игровая механика» имеет много значений, но сегодня я буду говорить об игровой механике как об абстракции, определяющей состояние игры. Очень упрощённо это выглядит вот так:



Есть только два фактора, которые определяют любое текущее состояние игры: механика (правила) и игроки своими действиями.

Уровень ядра


Такт 1: определение состояния
Всегда есть некое текущее состояние системы (например, начало хода). Оно определяется на первом такте инициализирующей последовательностью, когда игроки «загружают» игру, раскладывая поле, выбирая фишки, распределяя начальные ресурсы и так далее. Затем оно меняется в зависимости от происходящего в игре.
Читать дальше →
Total votes 60: ↑56 and ↓4+52
Comments18

А все ли в биткоине так хорошо, как заявляют его пропоненты?

Reading time6 min
Views91K
Я, как обладатель аж целых 9-и биткоинов, конечно несказанно рад их резкому влету в цене. Однако же, лично мне непонятно всеобщее ликование по этому поводу, как и не понятны причины роста, нет, я хочу сказать что конечно же мне известны и понятны конкретные причины последнего пузыря, но мне непонятен именно настрой многих людей, что биткоины могут стать революцией которая подорвет все наши экономические устои (в хорошую сторону). Более того, я считаю, что заявленные биткоином, и расхвалеваемые многими свойства не являются истинными, например, я хочу показать что:
— биткоин вовсе не децентрализован
— в биткоине совсем не дешевые транзакции
— и да, что майнеры просто так прожигают реальные ресурсы

Прежде чем я перейду непосредственно к тому что же не так с биткоином, я хочу рассказать причину текущего пузыря, я не претендую на истину, так что судить вам, но тем не менее…

Расследования, интриги, под катом
Читать дальше →
Total votes 183: ↑136 and ↓47+89
Comments242

90 рекомендаций по стилю написания программ на C++

Reading time20 min
Views408K
От переводчика. Искал в интернете простой и легко применимый гайдлайн по написанию программ на C++. Мне понравился один из вариантов, и я решил его перевести и опубликовать. Если хабрапользователи хорошо встретят этот топик, могу перевести и другие связанные документы, а также гайдлайны по написанию кода от других компаний.

1 Введение


Настоящий документ содержит рекомендации по написанию программ на языке C++.

Рекомендации основаны на установившихся стандартах, собранных из различных источников, личного опыта, частных требований и потребностей определённых проектов, а также почерпнутых из источников (см. ниже).

Но для появления ещё одного списка рекомендаций, помимо указанных источников, есть несколько причин. Основная причина — их излишняя обобщённость, поскольку зачастую требуется задать частные правила (в особенности правила именования). Данный документ содержит комментарии, что делает его более удобным в использовании при проведении ревизий кода, чем другие уже существующие документы. К тому же, рекомендации по программированию обычно вперемешку содержат описания проблем стиля и технических проблем, что не совсем удобно. Этот документ не содержит каких-либо технических рекомендаций по C++, делая упор на вопросах стиля.
Читать дальше →
Total votes 181: ↑137 and ↓44+93
Comments213

Моделирование большого количества взаимодействующих друг с другом частиц

Reading time6 min
Views30K
Рассмотрим ситуацию, когда необходимо обрабатывать столкновения между объектами. Как вы в этом случае поступите? Вероятно, самым простым решением будет проверить каждый объект с каждым другим объектом. И это правильное решение, и все будет замечательно до тех пор пока объектов не много. Как только их станет порядка нескольких тысяч, вы заметите, что все стало как-то медленно работать. А если частиц несколько десятков тысяч или сотен? Тогда все замрет. Вот здесь уже интересно, на какие хитрости и оптимизации вы пойдете, чтобы решить такую проблему.

Для простоты, будем рассматривать 2D случай, частицы круглые, радиус частиц у всех одинаковый.

Содержание


1. Обзор алгоритмов
1.1. Полный перебор
1.2. Sweep & Prune
1.3. Регулярная сеть
2. Некоторые оптимизации
2.1. Sweep & Prune
2.2. Регулярная сеть
3. Сравнение скорости выполнения
4. Приложение (программа и исходный код)
5. Заключение

Читать дальше →
Total votes 147: ↑145 and ↓2+143
Comments45

От программирования к железу или «Почему оно не работает?».Ликбез

Reading time9 min
Views146K
image
Привет Хабр. В последнее время среди программистов все больше стала набирать популярность цифровая электроника, появляются все новые платформы, позволяющие без каких либо особых знаний в электронике собирать различные устройства. Сам я начинал заниматься аналоговой электроникой, позже — цифровой и программированием. Многие же — наоборот — сначала программированием, а потом пытаются заниматься железом, при этом знания по части электроники практически нулевые и люди не знают/не понимают элементарных для олдфажного электронщика вещей. В данной статье я постараюсь затронуть наиболее важные на мой взгляд моменты, как по части проектирования схем, так и по части разводки плат. Надеюсь мои советы помогут миновать некоторые грабли
Читать дальше →
Total votes 140: ↑138 and ↓2+136
Comments36

Иерархические модели в Qt

Reading time8 min
Views57K
Продолжаю тему создания моделей с использованием Qt MV. В прошлый раз была критическая статья по поводу того, как делать не надо. Переходим к позитивной части.

Для создания плоских моделей списков и таблиц можно использовать заготовки QAbstractListModel и QAbstractTableModel. Доведение их до готовности не составляет большого труда, поэтому рассматривать их подробно нет необходимости.

Создание же иерархических моделей – более сложная задача. О ней и пойдет речь в этой статье.
Заинтересовавшихся прошу под кат
Total votes 24: ↑23 and ↓1+22
Comments7

Код с душком (рефакторинг М. Фаулера)

Reading time2 min
Views76K
Всем привет.

Небольшая шпаргалка для новичков, и всех остальных кто забыл, по книге Рефакторинг. Улучшение существующего кода Мартин Фаулер.
Читать дальше →
Total votes 42: ↑20 and ↓22-2
Comments8

Как запустить программу без операционной системы

Reading time13 min
Views181K

Так вышло, что в нашей статье, описывающей механизм опроса PCI шины, не было достаточно подробно описано самого главного: как же запустить этот код на реальном железе? Как создать собственный загрузочный диск? В этой статье мы подробно ответим на все эти вопросы (частично данные вопросы разбирались в предыдущей статье, но для удобства чтения позволим себе небольшое дублирование материала).

В интернете существует огромное количество описаний и туториалов о для того как написать собственную мини-ОС, даже существуют сотни готовых маленьких хобби-ОС. Один из наиболее достойных ресурсов по этой тематике, который хотелось бы особо выделить, это портал osdev.org. Для дополнения предыдущей статьи про PCI (и возможности писать последующие статьи о различных функциях, которые присутствуют в любой современной ОС), мы опишем пошаговые инструкции по созданию загрузочного диска с привычной программой на языке С. Мы старались писать максимально подробно, чтобы во всем можно было разобраться самостоятельно.

Итак, цель: затратив как можно меньше усилий, создать собственную загрузочную флешку, которая всего-навсего печатает на экране компьютера классический “Hello World”.

Читать дальше →
Total votes 196: ↑188 and ↓8+180
Comments69

Телевизоры. Часть 3. 3D. Типы, различия, источники воспроизведения и контент. Мой выбор телевизора

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

В третей части я хочу поделиться с вами своими размышлениями касательно стереоизображения (или как его принято называть — 3D), разобраться в основных отличиях активного и пассивного 3D, их технической реализации. Рассказать, как, какие и главное — чем это 3D воспроизводить. Ну и, собственно, какой телевизор я выбрал и почему. А еще тут будут фотографии
Читать дальше →
Total votes 82: ↑75 and ↓7+68
Comments151

Больше руткитов — «хороших» и разных. Part II

Reading time7 min
Views18K
Начало здесь.

TDL-4


Разработчики TDL продолжают идти в ногу со временем. На этот раз их взор устремился на неохваченные ранее 64 битные системы. В начале августа 2011 года появляется 4 версия TDL с новыми «фишками». Во-первых — появилось разделение рабочих файлов на 32 и 64 разрядные версии. Во-вторых — в очередной раз изменился алгоритм запуска после перезагрузки. Ранее подобный алгоритм применялся в ВПО Sinowal, достаточно известном своими новациями сотрудникам антивирусных компаний. Теперь TDL версии 4 заражал главную загрузочную запись (MBR). Данный способ позволяет ему загружаться раньше операционной системы, сразу после старта компьютера. Таким образом, TDL-4 из руткита «мутировал» в буткит. Как и ранее, компоненты TDL-4 хранились в специальной области жесткого диска размером не более 8 Mb, зашифрованные алгоритмом RC4. Код в MBR передавал управление компоненту ldr16 (из хранилища). После передачи управления ldr16 производил перехват функций работы с жестким диском (ОС еще не загружена). Для загрузки TDL-4 использовалась подмена файла kdcom.dll (путем установки перехватчика на Int 13h и поиска определенной сигнатуры kdcom.dll), который необходим для инициализации ядра операционной системы на стадии загрузки. Вместо kdcom.dll в итоге загружался вредоносный компонент ldr32 или ldr64 (из хранилища) в зависимости от разрядности целевой ОС. Бинарный код ldr32 и ldr64 практически идентичен, так как они скомпилированы из одного исходного кода. Но, кроме разницы в коде, в 64 битных системах, начиная с Windows 2003 x64 (XP x64 и далее Vista, Seven), появилось несколько технологий, направленных на защиту от вредоносного воздействия. Одна из них — Patch Guard, которая отслеживает изменение критических объектов ядра ОС, таких как:

  • таблица глобальных дескрипторов — GDT;
  • таблица дескрипторов прерываний — IDT;
  • таблица дескрипторов системных сервисов — SSDT;
  • некоторые системные файлы, например, NTOSKRNL.EXE, NDIS.SYS, HAL.DLL;
  • служебные MSR регистры STAR/LSTAR/CSTAR/SFMASK.
Читать дальше →
Total votes 61: ↑56 and ↓5+51
Comments12

Лучшие рекрутинговые видео 2012 года

Reading time3 min
Views24K
К концу уходящего года мы собрали десятку лучших видеороликов, в которых компании рекламируют себя как работодателей. В англоязычной среде такие видео принято называть «recruiting videos». При отборе мы руководствовались двумя простыми принципами: видео должно было выйти в этом году и стать общедоступным. В России объем рынка HR-брендинга на настоящий момент оценивается нами в сумму около полутора миллиардов рублей.

В десятку лучших попали видео от Apple, Вконтакте, Twitter, Одноклассников, Канадской разведки, Starbucks и других. Одно из самых интересных открытий этого года — безбашенное видео от Kixeye:



Смотреть все лучшие рекрутинговые видео года
Total votes 34: ↑30 and ↓4+26
Comments12

О подключении самописного Objective-C плагина к игровому движку Unity 3D

Reading time7 min
Views10K


Доброго всем дня.

Начнем собственно с того что такое Unity 3d В кратце это трехмерный игровой движок. На официальном сайте доступна бесплатная версия, pro версия и версия с возможностью заливать приложения на мобильные платформы уже стоят денег.
Читать дальше →
Total votes 19: ↑15 and ↓4+11
Comments15

Ретенция, или почему пользователь вернется в игру? Продолжение

Reading time12 min
Views33K
Привет, Хабр!

Это продолжение первой части статьи о том, какие существуют инструменты влияния на ретенцию (retention) игры. Напомню также, что понятие «ретенция» в большей мере применимо к активной фазе работы и развития социальной или мобильной игры. Вряд ли эти же механизмы применимы к случаям, когда мы перепроходим игры, в которые играли 5 лет назад.

В предыдущей части мы рассмотрели набор инструментов влияния на ретенцию, среди которых было введение персонажей и сюжетной составляющей, рейтинги, взаимодействие с друзьями и так далее. Пора увеличить этот список!
Читать дальше →
Total votes 77: ↑73 and ↓4+69
Comments50

Больше руткитов — «хороших» и разных. Part I

Reading time7 min
Views21K
Порой различия в стиле написания и применяемых принципах работы вредоносного программного обеспечения значительно отличается от образца к образцу. Одни делают ставку на полиморфизм, другие на rootkit компоненту. Особенно в плане развития руткит технологий отличилось семейство ВПО TDL (также называемое TDSS, Alureon, Olmarik, Tidserv). Как известно, новое — это хорошо забытое старое. На заре развития персональных ЭВМ, основную массу ВПО составляли вирусы, которые подразделялись на два класса — файловые и загрузочные (были и комбинированные, например, печально известный OneHalf). Достойным продолжателем дела загрузочных вирусов является буткит TDL-4, хоть и является троянской программой (не способной самостоятельно распространяться). Буткит – слово, образованное из слов бут (boot, загрузочная область) и руткит (rootkit, средство сокрытия признаков деятельности). Но прежде чем стать буткитом, TDL проделал большой путь.
Читать дальше →
Total votes 38: ↑35 and ↓3+32
Comments17

Сохранение игры в Unity3D

Reading time19 min
Views165K
Иногда сохранения просто не подразумевает жанр... Если вы пишете не казуалку под веб и не беспощадный суровый рогалик, без сохранения данных на диск не обойтись.
Как это делается в Unity? Вариантов тут достаточно — есть класс PlayerPrefs в библиотеке, можно сериализовать объекты в XML или бинарники, сохранить в *SQL*, можно, в конце-концов, разработать собственный парсер и формат сохранения.
Рассмотрим поподробнее с первые два варианта, и заодно попробуем сделать меню загрузки-сохранения со скриншотами.

Будем считать, что читающий дальше базовыми навыками обращения с этим движком владеет. Но при этом можно не подозревать о сущестовании в его библиотеке PlayerPrefs, GUI, и ещё в принципе не знать о сериализации. С этим всем и разберёмся.
А чтобы эта заметка не стала слишком уж увлекательной и полезной, ориентирована она самый неактуальный в мобильно/планшетно/онлайновый век вариант — сборку под винду (хотя, конечно, более общих моментов достаточно).

  • Кстати, пару недель назад на Хабре была статья, где автор упомянул, что Unity3D проходят в курсе компьютерной графики на кафедре информатики питерского матмеха. Занятный факт, немало говорящий о популярности движка.
    Хотя насколько это в целом хорошая идея — на мой взгляд, тема для дискуссии. Может быть, обсудить это было бы даже интереснее вопросов сериализации =)

Пройти на следующую локацию
Total votes 31: ↑27 and ↓4+23
Comments18

Six Towers. История успеха?

Reading time3 min
Views78K

За три года я выложил в Apple Appstore центнер приложений.
Большинство из них интересны лишь моему воспаленному мозгу.
Некоторые приносят до 100 долларов в год. Не надо ржать, слушайте дальше.
Число игр с ежегодным доходом в 1000 долларов равно числу пальцев на руке английского программиста.
И одно приложение из сотни выстрелило. На сегодняшний день 19 декабря оно заработало 248 457 денег и к Новому 2013 году обещает преодолеет четверть-миллионный рубеж.
Согласно опросу, проведенному на Хабре, 82% местных жителей считают это успехом.
Я вынужден с ними согласиться.

В статье веселый рассказ, как и почему это произошло.
Примеров программного кода не будет. За примерами программного кода идите Вы на stackoverflow.com.
Строгих редакторов предупреждаю, что приложение бесплатное, а статья бессыльная. Значит, без ссылок.

Редакция выбрасывает меня в пятый раз из хаба Game Development. Я в недоумении. .

Читать дальше →
Total votes 294: ↑258 and ↓36+222
Comments123

Алгоритм поиска пути Jump Point Search

Reading time6 min
Views123K
Этот алгоритм является улучшенным алгоритмом поиска пути A*. JPS ускоряет поиск пути, “перепрыгивая” многие места, которые должны быть просмотрены.  В отличие от подобных алгоритмов JPS не требует предварительной обработки и дополнительных затрат памяти. Данный алгоритм представлен в 2011 году, а в 2012 получил высокие отклики. Что из себя представляет данный алгоритм и его реализацию можно прочитать дальше в статье.


Читать дальше →
Total votes 110: ↑108 and ↓2+106
Comments37
12 ...
8

Information

Rating
Does not participate
Registered
Activity