Pull to refresh
108
0
Александр @Silf

User

Send message

Meet-in-the-middle: оптимизация перебора и не только

Reading time3 min
Views16K
В прошлой статье я писал про эвристические методы оптимизации перебора. В этой статье я расскажу вам о ещё одной, но уже асимптотической оптимизации — meet-in-the-middle.

Типичные для этого метода снижения асимптотики: и .

Вступление


Метод заключается в том, чтобы разделить задачу пополам, получить какие-то данные и сопоставить их друг с другом.

Meet-in-the-middle имеет смысл применять, если для конкретной задачи выполняются два условия:
1) Время обработки половины данных асимптотически меньше времени получения итогового ответа.
2) Известен асимптотически более быстрый способ получения ответа для всей задачи с использованием информации об обработки её половинок.
Читать дальше →

Нагрузочное тестирование в Skyforge, или Боты – санитары сервера. Часть 1

Reading time5 min
Views34K
Привет, Хабр!
Меня зовут Александр Акбашев. Я – QA-инженер Allods Team на проекте Skyforge. В зону моей ответственности входит организация тестирования сервера нашей игры, и именно о тестировании сервера будет данная статья. В мае я делал доклад на КРИ, который превратился в статью из двух частей. Эта статья – первая из них.


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

О системе диалогов Deus Ex и реальных механиках в настольных играх

Level of difficultyEasy
Reading time3 min
Views54K
Deus Ex Human Revolution — произведение искусства в лучших традициях киберпанка, своего рода IT-RPG. Игра отличная и стильная с крутым сюжетом и массой проработанных деталей. Но самое, на мой взгляд, крутое в ней – это система диалогов как механика.

Сейчас объясню в чём дело. Посмотрите на вот эти два скриншота: первый из Fallout II, второй из нового Deus Ex.


Старая добрая диалоговая система


Диалог в Deus Ex с установленным в голову социальным модулем
Читать дальше →

Разрешение конфликтов в транзитивных зависимостях — Хороший, Плохой, Злой

Reading time6 min
Views48K

Вместо предисловия


В ближайшую субботу мы с EvgenyBorisov будем выступать в Питере на JUG.ru. Будет много веселого трэша и интересной инфы (иногда не разберешь, где проходит граница), и одно из моих выступлений будет посвящено WTF-нутости модульной разработки программ. Я расскажу несколько ужастиков, один из которых будет о том, как все пытаются быстро, гибко и корректно описать зависимости в проекте, и что из этого обычно получается. Интересно? Тогда добро пожаловать в ад!


Скорее, конечно, «Хороший, Удобный и WTF-ный».
Погрузиться в конфликт...

Case story o продвижении игры собственными силами в топы US App Store

Reading time12 min
Views36K
В данной статье мы хотим рассказать про стратегию и тактику вывода на US рынок нашей f2p игры жанра Tower Defense (TD). Озвучим бюджеты, поделимся открытиями, проанализируем ошибки. Релиз игры состоялся год назад.

Для «затравки» достижения игры в App Store:
1. побывала в топ6 и топ7 своих категорий в US;
2. фичеринг в New&Noteworthy в 68 странах;
3. около 500 000 закачек;
4. «письмо счастья» от Apple;
5. 5 звезд — средняя оценка для всех магазинов в течение полугода;
6. обзоры на ведущих международных мобильных порталах.


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

Теорема Клини о неподвижной точке: квайны

Reading time6 min
Views23K
Здравствуйте, хабралюди. В последнее время было много разговоров о квайнах, и даже некоторый теоретический спин-офф.
Повторю за автором только что упомянутого топика: если вы знакомы с CS, то далее читать нет смысла — все это
вы и так хорошо знаете. А статья будет ответом на вопрос — всегда ли можно написать квайн? Точнее, на любом ли языке?
Физики скажут, что на всех: раз можно написать и на компилируемом C, и на брейнфаке, а кто-то и на SQL пишет — опыт говорит, что ответ на вопрос да. Математика тоже говорит, что да.

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

Использование AI и утилит при разработке игр жанра Tower Defense

Reading time6 min
Views35K
Эта статья продолжает тему применения математического моделирования при разработки игр в жанре ТD. В прошлых статьях рассматривались базовые параметры основных объектов игры – крипов и башен, и их зависимость от времени раунда и размера карты, а также принципы построения внутриигровой экономики, которая не привносила бы дисбаланс на тех или иных этапах игры.

Дальнейшее развитие этой темы напрашивалось само собой: если известны основные алгоритмы, которые позволяют задавать граничные рамки игровых параметров, то эти же алгоритмы можно применять для создания AI, который позволил бы хотя бы частично заменить игрока и проверить геймплей «вживую».


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

«Краник», или алгоритм для поиска цифр числа Пи

Reading time5 min
Views38K
Привет, Хабр! Недавно столкнулся с задачей подсчёта числа Пи до знака, номер которого будет выбирать пользователь. Сразу полез на Википедию, почитать, что за зверь такой, это Пи, и как его находить с заданной точностью. Формул, описывающих число Пи, уйма. Но для решения моей задачи всё в этих формулах упирается либо в точность и длину базовых типов языка (я выбрал Java), либо (для решения предыдущей проблемы) в длинную арифметику, которую мне реализовывать не очень-то хотелось.
Читать далее

5 «хаков» для уменьшения накладных расходов при сборке мусора

Reading time6 min
Views17K

В этом посте будут рассмотрены пять путей повышения эффективности кода, помогающие сборщику мусора проводить меньше времени за выделением и освобождением памяти. Долгая процедура сборки мусора может привести к явлению, известному как «Stop the world».

Общие сведения


Сборщик мусора (Garbage Collector, GC) существует для обработки большого количества выделений памяти под короткоживущие объекты (например, объекты выделенные в процессе рендеринга веб-страницы, устаревают сразу как только страница показана).

GC в этом случае использует так называемое «молодое поколение» («young generation») — сегмент кучи, где размещаются новые объекты. Каждый объект имеет поле «возраст» («age», находится в заголовке объекта), который определяет сколько сборок мусора он пережил. Как только достигнут определенный возраст, объект копируется в другую область кучи, называемую «старым» («old») поколением.

Процесс все еще эффективен, но уже становится заметен. Способность уменьшить количество выделений памяти под временные объекты, поможет нам увеличить производительность, особенно в широко масштабированных окружениях или в Android-приложениях, где ресурсы более ограничены.

Ниже определены пять путей, которые можно использовать в повседневной разработке для повышения эффективности работы с памятью, при этом не особо тратят наше время и не снижают читаемость кода.
Читать дальше →

Вода горит! А также ЭГЭ и волны-убийцы

Reading time14 min
Views198K
Водяная спичка — устройство для поджигания воды и проведения интересных опытов с взрывами.
Это конечно не термоядерный взрыв, но что водородный, это точно! Опыт безопасен, так как водород сгорает мгновенно, без накопления опасных объемов.
Предполагаю, что подобная буря в стакане, в масштабах планеты является источником возникновения интересных явлений — волн-убийц и цунами неизвестного происхождения, которые появляются буквально из ниоткуда, обрушиваются на судно и так же бесследно исчезают. На данный момент отсутствует внятное объяснение причин возникновения таких волн.

Возможно, все происходит так…


Анимация “Водяной”

При попадании молнии на поверхность Мирового океана, происходит водородный взрыв, а при удачном сочетании глубины воды и рельефа дна, направления удара и величины напряжения, продолжительности импульса и длительности его фронта — формируется огромная одиночная волна в результате импульсного электролиза поверхностного слоя воды, рассматриваемого в этой статье. Не последнюю роль в явлении играет резонанс.
В районе Бермудского треугольника эти условия выполняются наиболее часто, поэтому он получил свою печальную известность.
Примерно одна миллионная из 250 миллионов молний, ежегодно бьющих по поверхности Мирового океана, рождает супер-волну.
Белая волна — насыщенная газами вода, в которую попадают экипажи низколетящих летательных аппаратов, не является вымыслом и она присутствует в опытах. Вписывается в эту теорию и возникающий при ударе молнии электромагнитный импульс (ЭМИ), выводящий из строя навигационное оборудование.
В отличие от других экзотических способов поджигания воды, рассматриваемый вариант прост и имеет 100% повторяемость. Опыт показывает огромную скорость и производительность электролиза воды при коротком импульсном воздействии, а также позволяет безопасно исследовать электрогидравлический эффект и молнию в лабораторных условиях. Прибор можно использовать для изучения условий формирования блуждающих волн. В дальнейшем станет реальностью создание автоматических устройств, которые сгенерируют встречную волну для гашения разрушительных цунами и волн-убийц в охраняемых прибрежных зонах.

Предположение проверено и подтверждено на небольшом макете. GIF-анимация “Водяной” — формы волн: “одиночная башня”, “белая стена”, а также чудо-юдо с глазами и другие красивые элементы из воды, полученные при начальном для возникновения эффекта напряжении 145 вольт, показаны в тексте выше.
Любой желающий может повторить опыт и проверить предположение.
Читать дальше →

Корреляции для начинающих

Reading time6 min
Views221K
Апдейт для тех, кто сочтет статью полезной и занесет в избранное. Есть приличный шанс, что пост уйдет в минуса, и я буду вынужден унести его в черновики. Сохраняйте копию!

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


Введение


Зачем это вообще надо? В науке и около нее очень часто возникает задача предсказания какого-то неизвестного параметра объекта исходя из известных параметров этого объекта (предикторов) и большого набора похожих объектов, так называемой учебной выборки. Пример. Вот мы выбираем на базаре яблоко. Его можно описать такими предикторами: красность, вес, количество червяков. Но как потребителей нас интересует вкус, измеренный в попугаях по пятибалльной шкале. Из жизненного опыта нам известно, что вкус с приличной точностью равен 5*красность+2*вес-7*количество червяков. Вот про поиск такого рода зависимостей мы и побеседуем. Чтобы обучение пошло легче, попробуем предсказать вес девушки исходя из ее 90/60/90 и роста.
Читать дальше →

Перестаньте учить английские слова

Reading time4 min
Views464K
Шесть советов тем, кто хочет выучить язык и переводить.

Иллюстрация с сайта speakoutitalian.com

Авторы Хабра, которые переводят статьи, делают большое дело — они преодолевают за других большущий языковой барьер, это я говорю без иронии. Одновременно я регулярно вижу самодельные или сделанные фирмами программы для запоминания слов, и это я считаю не самым полезным делом. Да, конечно, карточки полезны. На начальном этапе, уча с полного нуля, первые 50 слов можно ими выучить. Дальше слова лучше учить в контексте.

Мой первый совет и главное, что стоит запомнить из заметки — бросьте запоминать слова. Учите грамматику.

Это ещё зачем?

Не повторяйте моих ошибок на собеседовании

Reading time5 min
Views357K
image
Я — разработчик с чуть более чем 10 годами опыта разработки и опытом прохождения нескольких раундов собеседований каждый год-два.
Пост написан под впечатлением двух предыдущих постов на смежную тему — Как я искал сотрудников или Как не надо проходить собеседования и Как я искал работу или Как не надо проводить собеседования. И хотя в этих постах освещены наиболее насущные проблемы соискателя и работодателя, рискну высказать свое мнение, которое основано на лично набитых шишках и помогает взглянуть на проблемы под другим углом.

Также рискну обрисовать пути решения проблем, состоящие в том, чтобы поменять то, что можно поменять (в основном — себя), а не то, чего изменить нельзя (скажем, рынок труда).

Ошибка №1
Соискатель получает столько приглашений на собеседование, что не в состоянии их обработать.
Логичный вывод соискателя: «на рынке острый дефицит кадров, так что могу отсеивать компании как хочу, отфутболив тех, кто заикнется о коде на бумажке, сортировках или гномиках». Возможна и менее скромная вариация того же вывода: «раз меня все хотят, значит, я классный профессионал, могу всем диктовать свои условия». Звучит, вроде, логично, но абсолютно бесполезно.

Я предлагаю взглянуть на корень ошибки (да-да, это ошибка). Если соискатель получает слишком много приглашений — значит, он неправильно составил резюме. Ведь именно резюме послужило причиной лавинообразного интереса.
Читать дальше →

AOP in action. AspectJ (CTW) + Spring + LTW

Reading time3 min
Views14K
Решил внедрить АОП логирование на проект и не внедрил. Как и почему, собственно и хочу поделиться.

Я не буду описывать суть и принципы АОП, а опишу только те проблемы, с которыми я столкнулся, и решения которых заняло много времени.
У меня было в распоряжении Spring, WebLogic, google.com и проект, куда я хотел внедрить АОП логирование. Скажу сразу, до этого я никогда не работал с АОП.

Проблема № 1


Spring AOP – использует proxy-based подход.

Если у нас есть класс (СlassA) с методами (methodA, methodB), при этом methodB() вызывает methodA() и аспект (допустим after) который должен выполняться при вызове methodA():

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

О компиляторах и интерпретаторах

Reading time2 min
Views68K

Если ты всегда мечтал написать свой язык программирования — добро пожаловать. Здесь ты наверняка найдёшь для себя что-нибудь интересное.

GitHub-юзер yawnt собрал чудесную подборку ссылок для любителей драконов, языков и прочих вкусных внутренностей. А знающие камрады в комментариях наверняка поделятся с тобой и другими яствами.

Пишет yawnt следующее:

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

Я не включил (и не собираюсь) в список ссылки на официальную документацию, т. к. считаю очевидным, что первым делом следует смотреть именно туда ;P.
Итак, куча интересных ссылок

Снова о биоинформатике: сборка бактериальных геномов

Reading time7 min
Views30K
C тех пор, как я опубликовал первую обзорную статью о биоинформатике, прошел уже почти год. Хотелось бы писать чаще, но как раз биоинформатика отвлекаться и не дает. В предыдущей статье была упомянута задача сборки генома, а также Лаборатория алгоритмической биологии (СПбАУ РАН), в которой ей занимаются. Как уже было сказано, над этой задачей работают во многих университетах мира давно и достаточно успешно. Однако для сборки генома биологи получают огромное количество различных типов данных, каждый из которых имеет свои особенности. Около пяти лет назад появилась технология MDA, открывшая большие возможности в области изучения бактерий. В результате появился тип данных, для которого потребовался новый геномный сборщик. Через несколько лет он был разработан, и не в Стэнфорде или Массачусетсе, а в Санкт-Петербурге, в молодом Академическом университете. Но обо всем по порядку.
Читать дальше →

Диплом магистра от Гарварда — реальность

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

Мой выбор пал на несколько отечественных вузов с вечерними программами, и я уже было выбрал МГТУ имени Баумана своей второй альма-матер, как я наткнулся на сайт Harvard Extension School .

image

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

Free2Play MMORPG. Типы игроков и их монетизация

Reading time19 min
Views108K
Уже два года как я не работаю в геймдеве. Соответственно, появилось время и желание обобщить мысли об этом бизнесе безобразии. От откровенно хулиганских, до претендующих на исследование.

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

Да, и я буду писать о монетизации довольно цинично. Я бы сказал, предельно цинично, хотя и с большой долей иронии и чёрного профессионального юмора. На самом деле всё возможно и не так страшно.

Поехали?
Читать дальше →

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

Reading time13 min
Views184K

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

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

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

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

Information

Rating
Does not participate
Location
Санкт-Петербург и область, Россия
Date of birth
Registered
Activity