Later Ctrl + ↑

Игра жизнь на javascript

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

Результат.

Игра состоит в том, что вселенная – поле из клеточек, имеет заполненные (живые) и пустые клетки (мертвые). Каждую итерацию клетка может “ожить”, “умереть”, или “продолжить жить” в зависимости от состояния ближних клеток (восемь штук в разных направлениях)

  • Eсли рядом с метвой есть 3 живых, то клетка “оживает”.
  • Eсли рядом с живой есть 2-3 живых, клетка продолжает жить.
  • Eсли рядом с живой 1 или больше 3 живых, клетка “умирает”.

При таких простых условиях появляются стабильные структуры (пульсары), структуры, двигающиеся по вселенно, структуры порождающие другие структуры. Чем не модель зарождения жизни.

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

Формулы доступа к соседним клеткам писались вручную для каждого соседа, с учетом “сворачивания” вселенной. Код неоптимизирован. Например, если рядом с живой клеткой уже есть 4 живых, она в любом случае умрет, и не имеет смысла продолжать искать живых соседей у нее. Но скорее всего его оптимизация принесет больше проблем с усложнением кода, чем решит вопросов производительности.

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

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

Производительность первого вариант желает лучшего как в плане математики, так и в плане FPS (более менее смотрится поле 320 x 240, увеличение ведет у проседанию FPS – ов на моем ноуте).

Интересно выглядит лесенка javascript heap в вебинспекторе

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

Список возможных оптимизаций. Хороший повод потрогать новые технологии, кстати.

  • Вынести математику в webworker. Иметь запас вычисленных состояний поля на несколько итераций вперед
  • Использовать типизированный массив.
  • asm.js. Для меня было странным не найти компилятора из js в asm.js. Поищу еще, но я был уверен, что такой существует.
  • Не перерисовывать те области канваса, которые не требуют перерисовки.

Этого эксперимента не было, если бы ему не предшествовали размышления о жизни.

Про зарождение жизни на Земле

Внимание. Пространные рассуждения не специалиста.

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

Докинз в “Эгоистичном гене” пояснил механизм появления первого “живого”. Существуют законы химии (которые на самом деле являются обобщениями законов физики), которые определяют условия, в которых структуры из атомов распадаются или объединяются в новые структуры. Чем агрессивнее среда, тем проще структуры могут находиться в ней. В менее менее агрессивной среде энергии уже не достаточно, чтобы разрывать простые структуры. В совсем неагрессивной среде, структуры не разрываются часто. Фишка нашей планеты в том, что она находится в таких условиях, в которых могут существовать достаточно сложные структуры, но при этому они периодически распадаются на составляющие под действием переменной окружающей среды (молния, тепло, солнечное излучение), чтобы объединиться в новые структуры.

Жизнь началась тогда, когда появились структуры, которые начали создавать реплики себя из окружающего материала. В основе этого механизма лежит все еще химия – набор правил, по которым взаимодействуют атомы. Ошибки в копировании (первые ошибки могли появиться в результате внешнего воздействия) привели к появлению вариаций репликаторов. Фишка репликатора в том, что чем он больше приспособлен к окружающей среде, тем больше он повторит себя, передавая копиям свои способности. Те репликаторы, структура которых позволяла реплицироваться с большей скоростью, преобладали над теми, кто реплицировался с меньшей. Те репликаторы, кто в своей структуре закрепили возможность к изменениям при реплицировании, получили большее распространение, чем те, кто оставался неизменным. Те репликаторы, кто первыми научились расщеплять другие для построения своего тела преобладали над теми, кто не умел.

Это настолько необычно понимать, что все мысли, действия, направлены по сути на то, чтобы передать гены, их обуславливающие своим потомкам и умереть. Ген – кусок ДНК, который описывает некоторый признак или склонность, но влиять на поведениенапрямую он не может. Понимать случайность происходящего. Если вселенна безгранична, то вероятность появления еще одной планеты с подходящими условиями для возникновения репликаторов приближается к единице.

После таких мыслей хочется почесать руки, и релизовать игру Конвея на javascript.

Переезд во Львов, поиск квартиры

Перебрался во Львов, хочу поделиться опытом. Ехал в неизвестность, квартиру планировал искать на месте.

Вместо того, чтобы тащить большинство вещей с собой в поезде, можно упаковать чемоданы и отправить их курьерской службой. В моем случае это была “Новая почта”. Из Днепра во Львов вещи идут 2 дня. 75 литров рюкзак и чемодан, раза в полтора больше стоили в пересылке 170 гривен. Вещи выслал за день до отъезда, и в поезде сидел налегке. После прибытия на склад, груз может находиться на нем еще 5 дней бесплатно, после этого за каждый день надо доплачивать 20% от стоимости пересылки. Склад дл пересылки лучше выбирать поближе к району, где планируется снимать квартиру.

Такси во Львове намного дешевле Днепровского. Можно позвонить в службу, заказать грузовой вариант, и стоить он будет на 10 гривен дороже простого. Надо учитывать, что в центре города постоянные пробки в течение дня. Поэтому варианты квартир проще смотреть, доходя до них пешком.

Во время поисков квартиры я жил в хостеле посуточно. В моем случае я подгодал время, когда несезон (это можно понять по наценкам на проживание в определенные месяца). Хостел, конечно, лучше выбирать в том районе, где планируется снимать квартиру. Я жил в общей комнате, с удобствами “в общем коридоре” за 55 гривен в сутки. За неделю был случился один сосед. Если вас больше двое и больше, проще снимать квартиру посуточно (от 150 гривен). Посуточные квартиры в центре дорогие только потому что они в центре. Нужно идти на компромисс удаленности и цены. Плюс сейчас идут строительные работы на нескольких главных улицах, поэтому без того еле живое движение замедлено.

Поиск квартиры. Я искал квартиру через риелторов. Большинство Львовских риелторов берут комиссию 100% от месячной цены квартиры. Плюс при вселении обычно просят задаток – за один месяц. Итого разово надо выложить 3x месячной цены квартиры.

Квартиру надо начинать искать за неделю-две до твоего фактического приезда. Лучше всего начинать поиски в понедельник. Воскресенье – нерабочий день. Через первую неделю после обращения во множество агентств мне начали систематически отвечать. До этого откликнулись единицы.

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

Есть агентства, которые на почту высылают фотки, цену, район, и ты говоришь будешь смотреть или нет (так было с vashvybir.com.ua).

У агентств есть дни, когда у них обновляется база квартир. Это мероприятие происходит 2 раза в неделю, поэтому начинать поиск лучше всего с понедельника.

Искать бюджетный вариант в перед началом учебного года – не удачное решение, ибо приезжают студенты.

Цены на квартиры определяет владелец, риэлтор ее только озвучивает. Системы оценки нет. Поэтому за одну и ту же цену можно встретить как убитое помещение, так и вполне адекватны. Торговаться можно и нужно. Владельцы могут запрашивать, например плату за 2 месяца, или оплату долларового эквивалента по курсу на день оплаты, но это единицы.

Есть техника “задатка”, я с таким не сталкивался, рассказываю с чужих слов. Если после просмотра квартира нравится, можно оставить хозяину задаток (любую сумму), как подтверждение серьезности намерений. Подписывается договор, по которому, если владелец передумает сдавать квартиру именно вам, он возвращает двойной размер задатка. Если вы находите другую квартиру, задаток остается у владельца.

Чем географически ближе к центру, тем дороже. В самом центре убитые однокомнатные стоят по 2500-3500 гривен.

Не из Львовского опыта – если хозяева не нравятся, лучше не иметь с ними дело.

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

Расчет с риэлтором происходит после подписания договора с хозяином квартиры.

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

Опыт и мнение

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

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

Система поощрений в интернете только способствует распространению псевдознающих.

  1. Высказывание мнение на то, как должно быть. Идеалисты страшны тем, что забывают упомянуть о том, что их описание устройства системы – плод их рассуждений, или, что хуже, воображения.
  2. Расширение частного на все общее. А вот меня родители пороли, и я вырос успешным человеком. Кстати, часто такой прием применяется в интернет спорах и на уровне разговора. “Всю жизнь не пристегивался, видишь, живой. И ты не пристегивайся”. Такие минимум не учитывают, что события могут быть вероятностными, происходить с разной частотой и разной силой последствий.
  3. Неверная интерпретация чужого опыта. И замалчивание факта, что статья-то по сути – чужой опыт или мнение (концов, на которые опирался первоисточник, уже не найти). Прочитал книгу гуру, и написал статью-обрубок на хабру.
  4. Упрощение. Упрощение до такого уровня, когда большинство будет способно принять информацию. Из двух вариантов человек простой скорее выберет тот вариант, который легче усвоить. “Взять и поделить”. Такие статьи получают больше социального одобрения, на которое ориентируется человек, новый в теме.
  5. Профессионал одной сферы распространяет свое мнение на другу сферу. Комикам, рассуждающим на экологические темы, религиозникам, рассуждающим на экономические темы посвящается. СМИ, в погоне за рейтингами, не пренебрегают эти приемом.

Для отделения мнения от опыта в разговоре можно использовать вопрос “на что ты опираешься, утверждая Х?”. В интернете же, косвенным подтверждением есть аворитет автора (не источника, за которым могут стоять как компетентные, так и не очень люди). Поэтому специализированным блогам нет цены. Бальзам на душу, когда читаешь личный блог медика про медицину, бизнесмена продажника – про продажу.

Кто я такой, чтобы рассуждать о подобном? Все, что есть в блоге – мое мнение.

Что почитать 28.11

что почитать 30.10

Earlier Ctrl + ↓