Category: наука

Category was added automatically. Read all entries about "наука".

L-systems generator

Небольшой проект, который я делал в перерыве между работой на Unicorn Contractors и Epam. 


Итак, что такое L — системы? Согласно википедии, это параллельная система переписывания и вид формальной грамматики. L-система состоит из алфавита символов, которые могут быть использованы для создания строк, набора порождающих правил, которые задают правила подстановки вместо каждого символа, начальной строки («аксиомы»), с которой начинается построение, и механизма перевода образованной строки в геометрические структуры. 


L-системы предложил и развивал в 1968 Аристид Линденмайер, венгерский биолог и ботаник из Утрехтского университета. Линденмайер использовал L-системы для описания поведения клеток растений и моделирования процесса развития растения. L-системы использовались также для моделирования морфологии различных организмов и могут быть использованы для генерации самоподобных фракталов, таких как системы итерируемых функций.


Простой пример L-системы  — кривая Коха. Здесь, старт задает аксиома F , набор порождающих правил состоит из всего одного (F → F+F−F−F+F).


Механизм перевода — простейший, F — это прямой отрезок, z


Механизм перевода в графику — F — отрезок определенной длины на плоскости, +  поворот вправо на 90 градусов, — соотвественно влево.


Таким образом, мы имеем (пусть n — итерация)







Koch iterations



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


Collapse )

Текущее и еще пара слов об обучении.

После предыдущей статьи произошел некоторый отклик, чему я очень рад. Посыпались просьбы вроде "а что конкретно я делал" и подобные им. Я достаточно долго думал на эту тему в сторону точного и полного описания, вроде такого ToDo листа, опирающегося но который умный человек сможет повторить путь. Но все таки отказался от этой идеи - потому что умному человеку такой список не нужен, а дураку - не поможет. Как это видится уже сейчас, никакая конкретика в плане программирования не работает. У каждого из нас свой мозг, предрасположенности, количество свободного времени и энтузиазм. Технологии устаревают очень быстро - то, что я учил несколько месяцев назад уже нужно как минимум корректировать, а через например год, так и вовсе информация станет абсолютно не релевантной. Так что извините, списка не будет.
Но пару общих советов вдобавок к предыдущему дать можно. Во первых, ставьте во главу угла здравый смысл - старайтесь трезво оценить ситуацию и дейстовать соответственно. Успех опирается на гибкость ровно в той же степени, как и на упорство в достижении цели. Это только кажется, что это противоположности, на самом деле такие качества в гармонии будут только дополнять друг друга. Пара книг по основам - вроде Eloquent Javascript и тексты на LearnJavascript.ru достаточны, дальше куда вас поведет в рамках собственных проектов - только ваше дело.
Про меня текущего.
Я продолжаю работать в Unicorn Contractors и считаю что мне очень очень повезло с первой компанией. Двое Александров - основателей компании оказывают всю возможную поддержку неумелому джуну и делятся своим бесценным опытом. Каждый день я имею возможность спросить совета и поработать вместе с действительно хорошими программистами, и я стараюсь впитывать в себя знания настолько, насколько это вообще возможно. Опыт работы на реальном проекте бесценен тем, что его не получишь самостоятельно никак. Конкретно первые недели полторы я проработал над учебным проектом, и потом мы всей компанией перешли на разработку сайта arxip.com. Это сложный, высоко нагруженный проект (1000 пользователей в день) выполненный как одностраничное приложение на React вкупе с серверным рендером. Не буду описывать подробности, тем более что внутреннюю информацию распространять нельзя, но первые дни, да и до сих пор мне приходится ежедневно сталкиваться с большими и нетривиальными проблемами, и соответственно, опыт, получаемый в процессе разработки - фантастический. Еще несколько месяцев вкупе с теорией и можно будет гордо именоваться мидлом.
Кстати, о теории.
Представляете, чем дальше в лес, тем интересней. Боковое знание через функционально программирование ведет в дебри теории категорий, алгебраических типов данных, монад функторов и тому подобных диковинных зверей. Математика, так сильно увлекшая меня в 18-19 лет на первом курсе универа, снова взялась за старое и я трепещу от возможностей. Времени на теорию, конечно недостаточно, но я стараюсь выкроить хотя бы половину одного выходного. К чему приведет это в долгосрочной перспективе - посмотрим.
Если у вас есть какие то вопросы и советы (конкретные) - пишите! Спасибо!

Научный метод изменения жизни к лучшему, или как я за полгода превратился из лепщика в программиста

Несколько постов назад я уже писал о мотивации и изменениях в жизни, но сейчас хотелось бы полнее осветить данный вопрос. В процессе самообучения у меня появилась некая методика, которая наконец то показала свою эффективность в достижении цели - буквально на прошлой неделе меня взяли на работу - так что теперь ее эффективность подтверждена реальностью. Сразу оговорюсь, что я буду рассматривать самообучение в контексте программирования, но вы сможете легко заменить слово "программирование" на "дизайн" или "приготовление заварных пирожных" - смысл посыла от этого не поменяется. Я уверен, что метод можно применить в любой области человеческого знания.
Итак, немного о себе и начальных условиях. Я родился в Колпино (неспокойный пригород Питера), в рабочей семье, учился в гимназии, интересовался английским языком с детства, поступил в универ ЛЭТИ, успешно бросил его на втором курсе, отправившись в путешествия. В путешествиях я провел долгие года, это довольно подробно описано в этом жж (посмотрите календарь, начиная с 2006 года), в какой то момент пытался учиться на географическом факультете СПБГУ, успешно бросил и его, в потом залип в Таиланде на 4 сезона...
Где-то в Турции, 2005 год. Первое путешествие в Азию.
в Каппадокии, 2005 год
Почти три года назад вернулся в Россию. В общем, вел достаточно свободный и распущенный образ жизни (о чем ни секунды не жалею). Деньги я зарабатывал разными способами - сезонной работой на реставрации, гидом и фотографом в Таиланде, какое то время даже был йогатичером (что вызывает бесконечное недоумение сейчас), потом стал профессиональным лепщиком. Но, в какой то момент, качество жизни моей стало ухудшаться. Отчасти это связано с кризисом (за работу на стройке перестали платить адекватно), отчасти с увеличением моих потребностей (у меня появилась и растет дочь). Теперь денег, которых и так было не много, не стало совсем. И не только денег - не стало свободного времени, оптимизма, энергии, а перспективами в жизни и не пахло. К весне - лету 2016 года я превратился в озлобленного, жалующегося на жизнь и вечно тоскующего человека. Видимо, кризис среднего возраста, или просто глупость привели к этому переломному моменту. Я пришел к состоянию, когда двигаться дальше без изменений, опираясь только на привычные действия - уже невозможно. Так что выбор был невелик: либо жалеть себя и наблюдать как твоя жизнь скатывается в канаву, либо, как лягушка в сметане, - бороться!

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

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

Условно методику можно разделить на 3 этапа или раздела. Первый - это психологический настрой, без него даже если и начнешь, бросишь быстро. Второй - сам подход к обучению (это самое простое). Третий начинается, когда фундамент первого и второго этапа заложены - это охота на возможности.

Итак, начнем с первого.
Первый этап - самый сложный, и он хотя действий требуется немного, он должен начаться и идти параллельно со всем остальным. Ни в коем случае нельзя пренебрегать психологическим настроем - без него ничего не получится! Самое главное что тут нужно сделать - это понять, Зачем Вам нужно это изменение. Очень важно акцентировать внимание в этот момент именно на себе. Здоровый эгоизм в этом этапе - это то что вам нужно. Что даст это изменение именно вашей жизни? Зачем оно вам вообще (не дяде Васе, родителям, детям или президенту) - именно Вам? Это очень важно понять - и переместить внимание с окружающих на себя, чтоб в дальнейшем, когда будет трудно и лень, можно было вернуться к этой мысли - "ведь это же надо мне, значит и усилия применять нужно тоже мне!". Перенос цели на себя вызывает то, что вы перестаете надеяться и ждать от жизни чего то. Правильного момента, Деда Мороза, справедливости, вмешательства господа Б-га итд. Ничего этого нет - между вами сейчас и изменениями потом путь проложен только вашими собственными усилиями, и делаете вы их для себя. Тут я не имею ввиду чисто эгоистический подход, когда вы не обращаете внимания ни на что и начинаете идти по головам - нет. К примеру, мне помогло осознание того что у меня есть дочь, и ее надо растить, и ей надо помогать. И для того чтобы я мог это сделать, мне нужно быть другим: работать на другой работе, иметь больше свободного времени... Именно мне нужно иметь деньги и свободное время для нее, но важно понять - нужно это именно мне. Понимание причин действий - супер важный момент, это хорошо использовать всем нам в жизни. Думать не только о том что вот, надо что то сделать, но и о том, Почему нам это надо. Еще один важный момент - нужно акцентировать внимание на краткосрочной перспективе - на этом проще сосредоточить свое внимание. Лучше "поехать на лето в Европу", чем "полететь на Марс". Представьте, что вы поднимаетесь в горы, и на склоне есть одна вершина, которую видно. Поднявшись на нее, будет видно другую, но не раньше.

Перенос целеполагания на себя - важный момент, и к нему регулярно стоит обращаться. Отталкиваясь от себя вы сможете делать собственные усилия, и пускай они будут поначалу минимальны, исходить они будут именно от вас, а это очень ценно. Я делаю это действие, потому что хочу стать лучше, и иметь возможность делать то то и то то. У этого действия есть причина, она находится внутри меня и делаю это действие тоже я.
С этого момента можно плавно перейти в область мотивации - я уже выкладывал видео от Mattiasа из FunFunFunction, где он говорит об этом моменте. Даже если вы смотрели его, посмотрите еще раз. Он говорит очень очень важные вещи. Самое главное что я вынес из него - это то, что мотивация что-то делать должна быть внутренней и не зависеть от внешнего. Иначе такая искусственная, внешняя мотивация быстро сдуется. Опираться надо только на себя, господа и дамы. Также как и быть самому себе авторитетом. Тут я могу в который раз посоветовать почитать Эриха Фромма - Бегство от Свободы. Почитайте, если не читали, а если и читали - перечитайте еще раз. А еще будет очень в тему почитать Виктора Франкла - он очень мне помог справиться с депрессией. Но не будем отвлекаться.

Резюмируя вопрос с мотивацией и психологическим настроем: сместите фокус внимания на себя, понимайте зачем вам это надо, поймите, что секрет успеха - только в собственных действиях. В день когда становится грустно - отвлекитесь, прогуляйтесь, вспомните зачем вы этим занимаетесь, и самое главное - знайте, что все зависит только от вас!

Также, надо верить в себя - не имея этой веры, ничего не получится. Но, надеюсь, читатель этой статьи свободен от подростковых комплексов и предрассудков, а если даже и нет - методика, если он будет ей следовать, поможет ему.

Отсюда мы можем плавно перейти ко второму этапу - собственно действия, работа. Каждый шаг в действии будет приближать вас к заветной цели и поддерживать вас в вере в себя. Сравнивая свою работу месяц назад, и сейчас, вы будете видеть позитивные изменения. Действия - это очень интересно. Что нужно для эффективного действия: я могу выделить два больших раздела: первый - это регулярность, второй - это действие "с умом".
Начнем по порядку. Если вы почитаете современные теории о нейропластичности (могу порекомендовать книгу Мы Это Наш Мозг и работы Савельева), то вам будет очевидно - для закрепления навыка нужно регулярно его применять. Все навыки и знания у нас зависят от структуры мозга. Какой-то разброс предрасположенности, конечно есть, но при должном обучении и правильном подходе мозг может очень серьезно перестраиваться (так, когда-то меня очень впечатлило исследование насчет объема мозга у жонглеров. Он заметно увеличивается в объеме при продолжительных тренировках), но происходит это на физическом уровне - если совсем упрощенно, то понимание - это способность нескольких областей мозга действовать сообща. Чтобы они могли действовать сообща, им нужна связь - нейронам нужно физически прорасти друг в друга своими аксонами, чтобы ток мыслей мог течь непрерывно. Эта связь налаживается только в случае, когда вы пытаетесь делать это действие, которому обучаетесь, и делаете это регулярно - тогда организм постепенно поймет, что вам нужна более прочная связь и начнет проращивать нейроны друг в друга. Так образуется привычка. Мы, на самом деле, пользуемся привычками постоянно, просто не знаем как обратить их во благо. И вот ваши действия (в моем случае это было написание программ), нужно превратить в привычку. Привычка, это что-то, что вы делаете регулярно, значит надо регулярно писать код (или рисовать, или играть на гитаре итд). Вначале, пока нейронные связи еще слабы, будет тяжело, но потом вы уже будете чувствовать себя некомфортно, если сегодня не сделали свое уже привычное действие.

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

Есть даже такой флешмоб - 100 days of code. Ты пишешь код каждый день, 100 дней подряд. Я в сам в нем не учавствовал, но штука отличная. Комитьте в гитхаб, делайте что то каждый день, даже если на это есть только 15 минут, но обязательно каждый день - и результат не заставит себя ждать. Регулярность действия - залог успеха. Хорошее видео на эту тему - 7 привычек высокоэффективных артистов.

Второй момент относительно действий - действие с умом. Это момент сложный и про него так просто не напишешь. В целом смысл в том, чтобы искать свои слабые места и покрывать их - в будущем они будут вас тормозить, использовать правильную литературу, язык итд. Тут все очень индивидуально. В вопросе с JS нужно постоянно держать руку на пульсе технологий - а то начнете изучать какой нибудь JQuery, а им уже кроме как в России никто и не пользуется, потратите время впустую. Начинать изучение технологии нужно с основ, чтобы заложить сразу фундамент правильного понимание - это как сольфеджио для музыки, вроде и не надо, но без него профессионалом не станешь. Также, основой для программистов является английский язык - без хорошего навыка хотя бы чтения вряд ли вы сможете продвинуться далеко. В общем, относитесь критично к тому, что вы делаете и что вам советуют, и пропускайте все через своеобразный фильтр. Отбрасывание ненужной информации сейчас может быть даже полезней, чем ее нахождение. Очень полезно будет найти людей, уже работающих в сфере, и спросить их совета (относитесь к нему все так же критически).

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

Засада - это ваши действия. Вы как бы создаете вокруг себя постоянный их ореол. Люди вокруг знают, чем вы занимаетесь, и то что вы делаете это регулярно. Вы как бы сидите в окружении своих действий, не двигаясь, не сбивая и не прекращая их. Сменить запах - это "работа на публику" - как уже сказано выше, окружающие должны знать, что вы делаете. Постепенно у вас начнут появляться мелкие проекты, которые можно показать - показывайте их, слушайте критику, будьте активными в соц сетях, сделайте себе сайт - сделайте так, чтобы вас заметили. И заметили ни как очередного бездельника, а как человека регулярного действия. Так вы смените запах. Подход с подветренной стороны - это тоже действие, сходное с предыдущим - активное подбирание к добыче , например, то что связано с резюме. Подойдите к написанию его ответственно - на этот счет есть 1000000 туториалов в сети, и сделайте его рассылку своей привычкой. Так вы создадите все необходимые условия, и будете сидеть в идеальной засаде. Останется только ждать. Если вы сделали все правильно, у вашей добычи просто нет возможности избежать поимки. По другому просто не может быть. Если этого не происходит - пересмотрите свою засаду. Может вам нужно сменить угол направления взгляда, или запах. Отгоняйте страх и неуверенность - это удел травоядных. Вы на охоте. И когда вы увидите жертву - цепляйтесь в нее мертвой хваткой и не отпускайте, используйте все возможности, а если она вырвется (меня взяла отнюдь не первая компания), продолжайте спокойно ждать, и будьте еще более эффективны.

Начинайте сейчас, верьте в себя, используйте научную методику, и все получится!
Спасибо что дочитали этот длиннющий текст! Надеюсь, мой пример вдохновит вас!

Огромное спасибо тем людям, без которых я не смог бы это осуществить. Безмерная благодарность и низкий поклон: Антону Кротову, Владимиру Долгачеву, Александре Катушковой, Алисе Коноваловой, Ангелине Сажновой и Павлу Лузанову.
Crimea

Немного про мотивацию, боковое знание и куча ссылок.

Итак, как вы можете увидеть, я постепенно продвигаюсь по пути самообучения - уже какие то базовые вещи становятся более-менее понятны, и поступили первые результаты. Сейчас для меня главная проблема и одновременно задача - мотивация. При моем складе ума очень просто начать новое дело, и очень сложно довести его до конца. Зная это, я придумываю для себя разные способы мотивации - как правило, прямое волевое воздействие сознания не приводит к положительному результату. От чрезмерного волевого усилия возникает усталость, а в последствии и опустошение, и сделать тут уже ничего не получится, надо отдыхать. Однако, без воли не удастся справиться - но она нужна не на мотивации "подними ленивую жопу и пиши код", а на как бы удержании постоянного внимания на интересующем меня вопросе. Я как можно чаще стараюсь косвенными способами вовлекать себя в программирование и математику - решаю несложные логические задачи, смотрю разные программистские ролики, смотрю фильмы про известных математиков (из недавнего - документалка про Аду Лавлейс - первую программистку, да это была женщина, и да, это происходило в 19 веке, а также новый фильм про Стивена Хокинга - Теория Всего, который мне совершенно не понравился морализаторством.), читаю соответственную литературу, итд. И тут работает даже не какой то конкретно момент вовлечения, а в целом как бы некий объем - это как при изучении иностранного языка (при условии, что вы действительно хотите или вынуждены) - вам необходимо погружение в среду, вот я эту среду и создаю для себя сам. Это и является нормальной функцией сознания, на мой взгляд - умение "повернуть себя" в правильную сторону, а остальное приложится. Конечно, успешность данной методики можно будет узнать только тогда (или если) я начну зарабатывать приличные деньги, занимаясь IT, и не потеряю к нему интерес. Чтож, поживем - увидим.
Другая мысль - это боковое знание. В книге, которую я сейчас читаю и КРАЙНЕ рекомендую всем, кто занимается проблематикой сознания, наукой, философией - Дзен и искусство ухода за мотоциклом описано так называемое боковое знание - как нечто, что появляется как бы из ниоткуда, когда ты увлечен и занимаешься одним делом, а тут возникает некая идея или интерес к идее. И она подчас захватывает нас еще больше чем первоночальное дело. В моем случае - это теория клеточных автоматов, машин Тьюринга, игры Жизнь и тому подобного. Откуда уже торчат ноги у фракталов и теорий хаоса. Как же это интересно! Я словно в детстве, вынужден насильно заставлять себя ложиться спать и обедать, потому что все свободное время посвящено этому. И это является сейчас главным мотивационным "мотором" для меня - сложность теперь в том, чтоб не упустить из виду основное - синтаксис и грамматику языка, на котором эти автоматы работают. И тут возникает еще одна мысль, и эта мысль гложет меня уже очень очень долго - так называемое "дело жизни". Очень не хотелось бы раздувать этот пост и делать из него винегрет (хотя уже), так что вкратце я считаю, что нет никакого дела жизни, есть сиюминутный интерес и природная предрасположенность, и мы даже не можем понять для себя, что является нашим интересом - потому что этот интерес может перед нами раскрыться только в каком то деле - как для меня из программирования (в начале совсем унылого) появилось это боковое знание - теория хаоса. Этот хаос повергает меня в восторг, и мне не терпится узнать, что будет дальше.
А книга великолепна. Почитайте.
Также, сегодня начал заниматься на https://university.mongodb.com/ очень интересно. Подробности - позже
Ну и несколько ссылок:
Видео про мотивацию

Изучите программирование с безумным Даниелом Шифманом - фреймворк для артистов и дизайнеров p5.js

Удобный поиск по issues в гитхаб: http://issuehub.io
Коллекция клеточных автоматов: http://atlas.wolfram.com/