Search
Write a publication
Pull to refresh
44
0

Пользователь

Send message

Решаем головоломки шаманов в World of Warcraft генетическим алгоритмом

Reading time3 min
Views36K

Привет, Хабражитель!
Не так давно, вышло очередное дополнение World of Warcraft Legion. Первым делом я принялся прокачивать шамана. В оплоте шаманов я забрел к Мастеру головоломок Ло и увидел то, что вы подумали — головоломку.


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

Подробности

Миф о RAM и O(1)

Reading time7 min
Views56K


Городская библиотека Стокгольма. Фото minotauria.


В этой статье я хочу рассказать о том, что оценивать время обращения к памяти как O(1) — это очень плохая идея, и вместо этого мы должны использовать O(√N). Вначале мы рассмотрим практическую сторону вопроса, потом математическую, на основе теоретической физики, а потом рассмотрим последствия и выводы.


Введение


Если вы изучали информатику и анализ алгоритмической сложности, то знаете, что проход по связному списку это O(N), двоичный поиск это O(log(N)), а поиск элемента в хеш-таблице это O(1). Что, если я скажу вам, что все это неправда? Что, если проход по связному списку на самом деле O(N√N), а поиск в хеш-таблице это O(√N)?


Не верите? Я вас сейчас буду убеждать. Я покажу, что доступ к памяти это не O(1), а O(√N). Этот результат справедлив и в теории, и на практике. Давайте начнем с практики.


Измеряем


Давайте сначала определимся с определениями. Нотация “О” большое применима ко многим вещам, от использования памяти до запущенных инструкций. В рамках этой статьи мы O(f(N)) будет означать, что f(N) — это верхняя граница (худший случай) по времени, которое необходимо для получения доступа к N байтов памяти (или, соответственно, N одинаковых по размеру элементов). Я использую Big O для анализа времени, но не операций, и это важно. Мы увидим, что центральный процессор подолгу ждет медленную память. Лично меня не волнует, что делает процессор пока ждет. Меня волнует лишь время, как долго выполняется та или иная задача, поэтому я ограничиваюсь определением выше.

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

История языков программирования: разброд и консолидация JavaScript

Reading time7 min
Views20K
Возможности HTML-документов развивались постепенно: сначала все ограничивалось собственно текстом с тегами и изображениями. Позднее появилась возможность вставки и воспроизведения звуковых файлов и видеоклипов. Однако помимо размещения мультимедиа-контента на веб-странице существовала проблема динамической обработки запросов и управления просмотром. Для ее решения стандартных средств HTML не хватало.


При генерации страниц в Web возникает дилемма, связанная с архитектурой «клиент-сервер». Страницы можно генерировать как на стороне клиента, так и на стороне сервера. В 1995 году специалисты компании Netscape создали механизм управления страницами на клиентской стороне,
Читать дальше →

Логика сознания. Часть 4. Секрет памяти мозга

Reading time21 min
Views51K
Когда с нами что-то происходит наш мозг фиксирует это, создавая воспоминания. Изменения, которые при этом происходят с мозгом, принято называть энграммами или следами памяти.

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

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

Чистая энергия за копейки

Reading time10 min
Views65K
Когда появятся термоядерные электростанции? Ученые чаще всего говорят, что-то вроде “через 20 лет мы решим все принципиальные вопросы”. Инженеры из атомной индустрии говорят про вторую половину 21 века. Политики рассуждают про море чистой энергии за копейки, не утруждая себя датами. Экономисты говорят — никогда.


Создатели первого в мире токамака Т-1 Арцимович, Явлинский тоже обещали электростанции через 20 лет.

Люди склонны давать прогнозы, экстраполируя имеющийся опыт. В случае попыток создания коммерческой термоядерной электростанции опыт отрицательный — 60 лет усилий привели к половинчатому успеху — что-то есть, но это явно не то что можно использовать каждый день для получения электроэнергии. Интуиция говорит, что если за 60 лет мы не преодолели эту стену, то и в будущем чего-то хорошего ждать не стоит.
И зря.

Космическая ошибка: $370 000 000 за Integer overflow

Reading time9 min
Views113K
Пуск.
37 секунд полета… бабах!
10 лет и 7 миллиардов долларов, потраченных на разработку.
Четыре полуторатонных спутника научной программы Cluster (изучение взаимодействия солнечного излучения с магнитным полем Земли) и ракета носитель Ariane 5 превратились в «конфети» 4 июня 1996 года.
А вину свалили на программистов.



Предыдущая модель — ракета Ariane 4 — успешно запускалась более 100 раз. Что пошло не так?

Чтобы штурмовать небеса, нужно хорошо знать язык Ада.

История языков программирования: как Haskell стал стандартом функционального программирования

Reading time7 min
Views38K


Теоретические основы императивного программирования были заложены ещё в 30-х годах XX века Аланом Тьюрингом и Джоном фон Нейманом. Теория, положенная в основу функционального подхода, формировалась в 20-х и 30-х годах. В числе разработчиков математических основ функционального программирования — Мозес Шёнфинкель (Германия и Россия) и Хаскелл Карри (Англия), а также Алонзо Чёрч (США). Шёнфинкель и Карри заложили основы комбинаторной логики, а Чёрч является создателем лямбда-исчисления.

Функциональное программирование как раз основано на идеях из комбинаторной логики и лямбда-исчисления.

Но теория так и оставалась теорией, пока в начале 50-х прошлого века Джон МакКарти не разработал язык Lisp (1958), который стал первым почти функциональным языком программирования. На протяжении многих лет у Lisp не было конкурентов. Позднее появились функциональные языки программирования APL (1964), ISWIM (1966) и FP (1977), которые не получили столь широкого распространения.

Со временем Lisp перестал удовлетворять некоторым требованиям разработчиков программ, особенно с ростом объема и сложности программного кода.
Читать дальше →

Советы и секреты №3

Reading time4 min
Views35K

Как сжать Windows 10 и освободить место. Самый удобный аудио- и видеотранскодер под Windows, Mac и Linux. Аналог GitHub для внутреннего использования


Как сжать Windows 10
В июле 2016 года Microsoft выпустила для Windows 10 новый механизм компрессии Compact OS для утилиты командной строки compact.exe, которая сжимает файлы операционной системы непосредственно во время её работы. У нового механизма компрессии есть много других интересных функций, но в целом он похож на работу программы WIMBoot в Windows 8.1 Update 1.

Compact OS освобождает минимум 2 ГБ места на диске. Не так уж и много, но на небольших SSD-накопителях это заметно.
Читать дальше →

Смотрите, кто говорит: Рождение видеофона

Reading time4 min
Views12K
Привет, Хабр!

Сегодня утром мне на глаза попалась эта статья, посвященная истории видеофона. Решил, что обязательно нужно ее перевести в кратчайшие сроки и поделиться с вами. Сказано — сделано.

Видеофон всегда казался очевидным следующим шагом в эволюции телефона. Так что эту концепцию на протяжении десятилетий старались развивать. И вот сейчас видеосвязь есть, но выглядит она немного иначе, нежели это представляли.



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

Go глазами java программиста

Reading time7 min
Views80K
Эта статья не для тех, кто уже пишет на go.
Она для программистов на других языках, которым инетересно, стоит ли тратить время на go.
Чем отличается go, например, от java и чем может быть полезен.
Читать дальше

История языков программирования: Perl — необычный язык, созданный лингвистом для программистов

Reading time12 min
Views37K


Язык программирования Perl создал Ларри Уолл (Larry Wall) в 1987 году, когда он работал системным программистом в американской компании Unisys. Цели, которые преследовал Ларри при разработке нового языка программирования, отражены в его названии — PERL, которое позднее стало расшифровываться как Practical Extraction and Report Language, то есть «практический язык извлечения „данных“ и „создания“ отчетов».

Одна из легенд о происхождении Perl гласит, что в то время уже существовал язык с таким названием, поэтому Ларри сократил название на одну букву, не изменив произношения. По иронии судьбы, сегодня тот язык не помнит никто, кроме историков, а Perl известен всему миру.

Хотя, по другой версии, Ларри назвал созданный им язык по имени своей невесты.


Ларри Уолл

На становление Perl повлияли языки Ada, Basic, Fortran, Lisp, Pascal и, конечно, язык C. Perl впитал в себя разные течения компьютерной науки: процедурное, модульное, функциональное и объектно-ориентированное программирование, макрообработку текста, а кроме этого — культуру ОС Unix, с ее богатым набором команд и утилит, стройной продуманной архитектурой и унифицированным подходом к представлению данных.
Читать дальше →

2D магия в деталях. Часть первая. Свет

Reading time10 min
Views77K

Игры большие и трехмерные уже давно радуют глаз реалистичным освещением, мягкими тенями, бликами и прочей осветительной красотой. В двумерных же играх — во главе стола прямые руки художника, который подсветит и затенит где нужно, спрайт за спрайтом, или даже пиксель за пикселем. А если хочется динамики и без художника, и да, в пиксельарте?

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

Обзор физики в играх Sonic. Части 5 и 6: потеря колец и нахождение под водой

Reading time5 min
Views21K


Продолжение цикла статей о физике в играх про Соника. В этом посте рассматриваются потеря колец и нахождение под водой.
Читать дальше →

40 туториалов для создания векторных иллюстраций

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

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

Итак, поехали:

Приступая к работе


1. Изучение векторной иллюстрации за 10 шагов



В этом уроке объясняется, каким образом создавать векторные иллюстрации используя Adobe Illustrator. Приводится объяснение ключевых параметров и инструментов, которое дополняется советами экспертов.

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

Эдсгер Дейкстра: в поисках «кратчайшего пути» к осознанному программированию

Reading time11 min
Views55K
image
Изображение с сайта abv24.com

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

Во всех своих исследованиях Дейкстра придает большое значение простоте и изяществу математических рассуждений. При написании своих работ он создал новый стиль научных и технических сообщений, который можно описать как нечто среднее между журнальными публикациями и дружеской перепиской.

Программирование – не набор пассов и заклинаний, не шаманство, не танцы с бубном, а математическая дисциплина. А всякая дисциплина, если она претендует на нечто большее, чем на внешний эффект, должна строиться на прочном фундаменте. Таким фундаментом для Дейкстры является математическая логика, а точнее – исчисление предикатов.

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

Оберон умер, да здравствует Оберон! Рабочее окружение ETH Oberon

Reading time3 min
Views11K
Перед тем, как начать повествование об операционной системе A2, необходимо упомянуть и о её предшественнице ETH Oberon, являющейся дальнейшим развитием первоначальной Oberon System.

В контексте статей (Часть 1, Часть 2), посвященных языку программирования Активный Оберон и операционной системе A2, ETH Oberon интересна с точки зрения развития пользовательского интерфейса в Оберон-системах и влияния на ИТ-индустрию. В отличии от первоначальной Oberon System, пользовательский интерфейс ETH Oberon представляет собой набор графических визуальных объектов ( гаджетов ). При портировании на новую графическую систему ещё раз было подтверждено, что ОС Оберон спроектирована очень хорошо и при портировании потребовались минимальные изменения.

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

image
На скриншоте рабочего стола ETH Oberon мы видим внизу скрытую панель, справа открыты инструментальные панели графических редакторов Rembrandt и Leonardo, слева два документа с графическим содержимым и html страница сайта ETHZ.
Читать дальше →

Проект «Оберон 2013»

Reading time14 min
Views38K
Мне тут коллеги одну полезную нагрузочку дали. Я быстренько с вами проведу беседу о вреде избирательной слепоты, поскольку с нею, проклятою, в нашей индустрии не совсем благополучно. Значит, перво-наперво, прежде чем с нею бороться, с нашим общим врагом – слепотой проклятой, давайте мы как следует обсудим и изучим примеры того, что не видит сообщество, чтобы наверняка знать, как оно может быть на самом деле.
Читать дальше →

Документация — основа игры

Reading time7 min
Views33K
В этой статье я хочу рассказать о том, как мы с другом оформляли документацию для своей первой игры. А так же о том, какое большое значение она имела и как помогла сэкономить деньги и время в процессе разработки. В статье я уделю чуть меньше внимания начальным главам дизайн документа, а больше расскажу о нашем опыте написания документации, связанной с контентом игры.


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

Мультиплеер в быстрых играх (Часть III: появление врага)

Reading time4 min
Views56K


  1. Части I, II (синглплеер с авторитарным сервером)
  2. Часть III (Появление врага)
  3. Часть IV (Хэдшот!)

Введение


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

В этой статье мы рассмотрим последствия одновременного подключения нескольких игроков к одному серверу.
Читать дальше →

Мультиплеер в быстрых играх (части I, II)

Reading time7 min
Views145K


  1. Части I, II (синглплеер с авторитарным сервером)
  2. Часть III (Появление врага)
  3. Часть IV (Хэдшот!)


Предлагаю вашему вниманию перевод статьи Fast-Paced Multiplayer (Part I): Introduction.

Разработка игры — само по себе непростое занятие. Но мультиплеерные игры создают совершенно новые проблемы, требующие разрешения. Забавно, что у наших проблем всего две причины: человеческая натура и законы физики. Законы физики привнесут проблемы из области теории относительности, а человеческая натура не даст нам доверять сообщениям с клиента.
Читать дальше →

Information

Rating
Does not participate
Location
Тернополь, Тернопольская обл., Украина
Date of birth
Registered
Activity