Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 

среда, 26 февраля 2014 г.

Парное программирование - мысли вслух...

Основные наблюдения: 
- парное программирование - это весело, с улыбками
- парное программирование - это шумно
- парное программирование - это концентрация на задаче

Если чего-то из этого не получается - повод задуматься. Что-то пошло не так.

В паре есть две роли. Тот кто у руля и тот, кто с test list (дальше, тестлистом). У каждой роли свои четкие обязанности. 

Тот кто с тесилистом - молчать должен, и стараться не критиковать вообще того кто у руля. Говорит тот, у кого клавиатура. Говорит о том, как он решет текущую задачу. Тот кто с тестилистом внимательно следит и смотрит за несоответсвием того кто у руля в том что он говорит и пишет. Говорю <= пишу >=, говорю -1 пишу 1. И так далее. Ловить баги.

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

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

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

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

Как джуник может помочь сеньйору? А сеньйор делает те же самые очепятки что и джуник, приблизительно с той же скоростью. За ними следи. Так же у сеньйора не получается что-то, что он думает, что получится. Магия в том, что в этот момент пока сеньор напряженно думает у руля, у джуника может появится идея и стоит только подождать немного пока сеньйор не сдастся (лимитировав его конечно по времени) а потом взять клавиатуру (снова поменяться ролями) и попробовать свое. Вышло? Поздравляю! Не вышло. Думайте дальше... 

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

Что касается спора. Все вопросы, которые возникают у вас обоих во время делания текущей задачи должны выписываться в тестлист тем, кто его сейчас держит в руках. Никаких клевых идей! Сейчас надо закончить то, что начали 2 минуты назад - потом уже все рефакторинги, пересомтры архитектуры и так далее... Все через тест лист. Спорить так же не сильно стоит. В момент когда текущая задача решена, просто выберите из списка то, что можно сделать быстро в течении следующих 5 минут. Если такой задачи сейчас нет - разбробите ту что есть на помельче. Выхлоп (коммит) и смена ролей должна происходить каждый 5-10-15 минут. 

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

Я только что сказал "сделать риверт". Так вот чтобы сделать риверт последних 2 минут, надо как минимум делать коммит каждые 5 минут. Частые коммиты, это то что помагает парному программированию.

Еще на каждом коммите полезно предлагать другу "дать пять". Это эмоциональный якорек успеха. И других ребят подбадривает...

Что еще? 

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

Зачем парное программирование? 

Для меня причине несколько. Более эффективное делание чего-то. Я не тужусь над проблемой сам, меня напарник подменяет. У пары сил обычно больше, чем у двоих ребят по отдельности, иначе не было понятия синергия.  В паре не страшно делать что-то потому как с ответственность делится с другом. Кроме того где ему страшно, не страшно напарнику и наоборот. В паре весело - это то, что запомнится на долго. В паре одет обмен опытом более эффективно, чем на митингах - просто потому, что он идет постоянно и неосознанно. Мы просто перенимаем хорошие привычки друг друга. 

Пара вытаскивает проблемы отношений в команде, потому как пару часов к ряду сидеть с коллегой плечо к плечу - будь готов, что будет притирка, неприятная обоим. Но после нее вы станете крепкими друзьями. Этому помогут совместные перекуры/чаепития и разговоры на отвлеченные темы. Этому поможет общий успех. Например на дейли теперь вы не будете рипортить тимлиду виновато глядя в пол, вы будете отстаивать друг друга. Это здорово! 

Что еще? 

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

Скорость с которой вы педалите просто зашкаливает. И у сработанной пары на много превышает затраты на то, что двое решают одну задачу - для менеджера на одну задачу двое больше времени уходит (вдвое дороже), а пара поймет вскоре, что при этом они становятся в X раз эффективнее. И x >> 2. Но не сразу - помни про внутренний барьер, желание переучить напарника - эффективность произойдет тогда, когда ты это преодолеешь.

На чем экономится время? Баналльно на всяких мессенджерах, соцсетях. Вероятность того, что твой напарник будет заинтересован посмотреть твою стенку на Facebook в то же время что и тебе и так же как тебе обычно стремится к 0. Ему интересно что-то другое, чем бы он занялся, если бы рядом не было тебя. Может он так отвлекается, отдыхает. Но когда вы в паре, вам надо найти другое развлечение, совместное, например чаепитие... 

Итак если сотрудник лоботряс (опять же по мнению менеджера), и половину рабочего времени тусит в соцсетях, то лечится это парным программированием. Два лоботряса сажаешь друг с дружкой в пару, вот они уже работают не 4 + 4 часа по отдельности, а 8+8 но вместе. Немного утрирую, но как-то так оно и происходит. 

Напарник с тестлистом не дает тебе отвлечься на клевую идею как-то все порефакторить (или прикрутить либу), которая у тебя вдруг возникла. Если кодишь сам - все бросаешь и берешься за клевую идею. Она ведь у меня в голове появилась. Значит она клевая. Но прикол в том, что если ее отложить на час в тестлист, а потом вернуться к ней спустя некоторое время, то окажется что никакая она не клевая, а вообще фукака... Напарник помагает тебе не сорваться на ее выполнение со словами "я выпишу это в тестлист" он предлагает продолжить начатое, ведь у нас есть 10 минут до коммита... С этим экономится масса времени.

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

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

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

Есть конечно же ограничения. Не работать больше 6-8 часов, 5 дней в неделю. Потому как иначе будет на износ. 

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

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

И помни, парное программирование как наркотик. Если вдруг привык а потом приходится работать не в паре, кажется что удалили пол мозга. Но и тут есть решения. Например эффект мишки тедди, когда напарником можешь поставить себе плюшевого медвежонка и ему все рассказывать вслух. TDD, когда за твоими ошибками следят тесты. Тестлист можно вести самому и ко всем идеям, что возникают относиться скептически. Частые коммиты и много других прикольных практик можно  выполнять самому. Было бы желание.

 

Side effect

Пока я думаю, что меняю что-то одно - я меняю что-то совсем в другом месте

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

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

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

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

"Тебе уже давно пора организовать что-то типа "джава субботников" или что-то в таком духе"

Тут вижу то, что для автора это сейчас важно. Ему сейчас стоит заняться джава субботниками. Не мне. Иначе он не думал бы об этом. А что касается меня - этим и так занят уже.

Или вот по поводу этого сегдняшнего вопроса с другом, его коллегой:

"Я с ней поделился этим и она считает, что так может говорить не совсем качественный сотрудник"

тут вижу - что сотрудница внутри считает себя той самой некачественной сотрудницей. У нее есть потребность в том, чтобы ее убедили в обратном. Я вижу, что надо сделать в ближайшее время - разыскать ее и похвалить за что-то. Хвалить (и как-то иначе убеждать) до тех пор, пока мысль о некачественности автора превратится в "так то ж наверное автор прикольнулся". Можно ее убедить в том, что я такого вкладывал в эти строки, и более того найдем согласие в этом вопросе. Но нужно ей совсем другое - не согласие по поводу этого утверждения, а чтобы похвалили и сказали что она умничка и все делает качественно.

"Сам же я не хочу чтобы у вас не было конфликта на этой почве, потому я и поднял этот вопрос..."

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

Потом мы ковырнули в сторону того, почему это случилось. Проходили тренинг по джаве, споткнулись об одно утверждение, создали потенциально конфликтную ситуацию, осознали это. Вопрос теперь, какой ценности это все служит? Ответ пришел... Хочется участвовать в переменах. Супер! А перемены зачем? Ну, если сегодня ничего не делать - меньше вероятности что, потом будет хорошо. Т.е. без того что я делаю сегодня, потом будет менее клевым.

Нет никакого потом. Есть ты и я (мы) сейчас. Есть то что мы делаем сейчас. Это скорее всего не то, что мы себе запланировали. Не то, что думали, к чему приведут наши прошлые действия. Это что-то, оно происходит прямо сейчас. Спрогнозировать как оно повлияет на будущее конечно же можно попробовать - и это обычно делает каждый, но это все иллюзия. Будет как-то, как ты совсем не ожидал. Люди будут тебя благодарить совсем не за то, что ты делаешь осознанно. Они будут благодарить тебя за тот side effect от того, что ты осознанно выбрал делать. Что-то, что обычно игнорится с сообщением "да не за что". Игнорится потому, что ты сейчас сосредоточен на чем-то другом.  А в этом другом тебя все не хвалят и не хвалят.

Ребенок например мало слушает то, что ему говорят родители. Он больше смотрит, что они сами делают и копирует поведение. Потому "Я воспитываю ребенка" - бред полный, если делать это словами, а не примером. И можно ругаться, применять силу - это все приведет совсем к другим результатам. Side effect

И вот человек говорит что-то, что важно кому-то сейчас делать. А я смотрю за тем, что он между строк пытается мне передать, что важно для него. Он сделал что-то и у него не получилось, а я смотрю за тем, что у него при этом получилось, и задаюсь вопросом, а ты обратил внимание на то, что это может быть важно для тебя? Что касается лично себя, то вечером перед отходом ко сну я смотрю на то, что было в моем сегодня такого, что было мимо планов. Как мультик. Уже все позади, можно расслабиться. Что нравилось, а что нет? Как на это реагировали люди? А потом спатки. 

А план это хорошо. Хорошо потому, что отделяет то, что важно, от того что не важно (что было запланировано). Важно то, что происходит с полным несоответствием плану, потому как это и есть Жизнь. Все что мимо плана - side effect - это намек на то, куда стоит сейчас хоть поглядеть на минутку. Посмотреть на себя успешного в этом.

А что касается менять. Мне кажется желание изменить что-то/кого-то к лучшему продиктовано тем, что в себе что-то не устраивает. Главное изменение, которое может произойти - изменение в себе. И даже не изменение, а допущение того, что во мне есть то, с чем я хотел бороться и оно замечательно. Не буду с ним бороться. Я не хочу его выкидывать - это моя ценность! Это часть меня. И после этого пелена с глаз вдруг падает и ты видишь совсем другую картинку. А именно как то, с чем боролись, что меняли мне помогает.

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

Как-то так.

вторник, 25 февраля 2014 г.

Ох уж эта злючая соседка с первого этажа...

Вопрос о грусти при смене компании с другом привел к написанию этого поста. Это даже не пост, а такой себе фрирайтинг в скайпе с другом. Уже после его вынес сюда, что часто делаю с другими своими постами. Итак друг покидает компанию и от этого грустит. 

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

Другу ответил приблизительно следующее.  

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

Другой вопрос если страшно...


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

25 последних лет, а это 9125 дней, можно сказать ничего страшного не происходило. Если и происходило - это становилось новым этапом, открывало новые возможности. Посмотри сам, проведи ретро. Самое страшное скорее всего было самым необходимым для тебя - это становилось понятно спустя некоторое время. А когда оно (страшное) наступало, было не до страха, надо было действовать и это наполняло твой день. Да и таких дней (
из этих 9000) было не так уж и много. И припомни, в основном случалось что-то, чего вообще никак не ждал. 


То, чего ты боишься, ты уже привит от этого. Это не случится. Что-то наверняка случится - в этом можешь не сомневаться - нежданчик, ну-вообще-нежданчик или а-разве-такое-вообще-бывает. Но ты справишься, у тебя есть этому доказательства в твоем уникальном прошлом. Справишься, потому как справлялся уже и не раз. А потом будешь всем рассказывать как ты это сделал. Или не будешь. Так вот сейчас вспомни это.

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



Опыт не пропьешь. Твой опыт будет тебе помагать всегда, чем бы ты не занимался. Он  (опыт) не боится обогощаться. Ему все новое в кайф. Боится, тот небольшой отдел мозга, который за стабильность. Твой опыт даже подталкивает тебя сделать что-то новое. Он не дает тебе скучать, изучая новое. А тот другой, наоборот сдерживает - в скуку загоняет. А скука - это когда ты насытился уже и надо нового.

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

Она пользу приносит. Если не зацикливаться на ней, а слушать всех соседей по очереди . Можно даже начать с нее, а потом послушать все остальные 199 жильцов. 

Спроси ее, что самое-пре-самое худшее может случиться? Возьми листик A4 - выпиши все. Или нарисуй mindmap-чик. Поработай с ними, ответами. Я в результате вышел к одному базовому страху, откуда все корни. Это страх смерти. Но это то, от чего никто не убежит.


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

Цель этой злой соседки уберечь тебя от смерти сегодня. Нужно это было в те времена, когда мы охотились за мамонтами. Там любое нововведение скорее всего приводило к gameover. Сейчас немного другое время, но эволюция не работает так же быстро - тот отдел мозга остался и продолжает работать. Но он в помощь. Послушай его. А потом все остальные 199 жильцов.

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




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

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



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

Опыту чего-то не хватает. Паззл не собран. Собери его. По своему. Я более чем уверен, что текущие события в твоей жизни не случайны. Все вокруг не происходит просто так, потому что так сказал великий Ramdom. Конечно же Random есть, но 1000 разных человек при одних и тех же условиях выберут 1000 разных путей. А если это так, значит каждым управляет что-то ихнее - их опыт. Если ты пришел к тому, что сейчас у тебя такая ситуация, значит это надо было для полноты твоего опыта. Ему это надо было. Так что расслабься и наматывай на ус. Ты отправляешься в новое путешествие. 





А соседке скажи, что сегодня умирать не собираемся - все ок. Она услышит тебя. Будет при этом дальше болтать свое. Сделай ей просто звук по меньше. Или на mute поставь. Шоколадку там подари при выходе из дому - а пока очухается, сел в машину и вжжжжж, тебя уже нет. А вечером, как будешь возвращаться домой и мимо нее проходить - скажи, вот видишь, жив здоров, все ок! Я ведь говорил!!

Знаешь, что еще помагает сладиться со страхом?

"Встретиься с ним?" - предугаываю ответ.  Нет! Я ХЗ как встречаться со страхом. Где он? Как его пригласить в гости?  Допустим я боюсь что подхвачу какую-то инфекцию. Что мне теперь идти в кожвен и там все дверные ручки и поручни облизывать? Или боюсь что кто-то залезет в окно (хотя живу я на 8м этаже) - что мне теперь написать на окнах WELCOME и лестницу пожарную прикрутить! А потом ждать в гости? И бояться? Или боюсь с окна выпасть, что теперь прыгнуть с него? Не знаю я что такое "встретиться со страхом". В моем опыте это абсурд.

А вот что не абсурд по моему - это спросить у своего опыта, "а когда мне было не страшно?". Потом - "а что я там делал такого особенного?" Я нашел для себя ответ, он может тебе пригодится, но скорее всего у тебя твои ответы лучше сработают. Мои ответы для себя:

1) Завтра не существует - этому сейчас учусь, весело, блин, т.к. столько лет жил в Завтра и Вчера.
2) Сегодня существует - в нем стоит больше делать что-то, занять себя тем, что выбрал делать.
3) Выключить телик.
4) Общаться с теми, кто уже сделал то что ты выбрал для себя 



Еще опыт мне подсказывает прям сейчас пункт 5).. Достучался, блин. Только отвлекся немного, а он тут как тут :) Вот что говорит - займись ка ты спортом, потому как там чето там вырабатывается в нас при этом и от этого очень здоровско в мыслях... Гормоны счастья там какие-то...

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

В общем все то же - отдай кому-то то, что хочешь получить сам.

И расслабсь. Все будет хорошо. Вот увидишь! 



понедельник, 24 февраля 2014 г.

Что делать, если ты влюбился?

От самых мудрых существ на Земле - детей


Выбор

Это наверное лучшее видео, которое я бы порекомендовал для просмотра тем, кто устает на своей работе.
Наемный работник, фрилансер, бизнесмен, инвестор, дауншифтер, вне матрицы - кто ты сейчас?
Деньги-бензин. Сколько тебе их надо в месяц? Заработай их за неделю.
Можно начать с любой точки. И много другого интересного в 30 минутах этого видео


Для себя выбрал:
- Написать свою книгу
- Поближе познакомиться с работами Жака-Ива Кусто. В детстве я бесконечно наблюдал за его фильмами, восхищался. Я это как-то забыл. Пересмотреть. Книги его перечитать. Это мой ментор
- Я фонтан
- Моя жизнь началась сегодня утром.

воскресенье, 23 февраля 2014 г.

Мерджим два реппозитория на git c сохранением истории

Задача не сложная. Есть два git репозитория с исходным кодом. В одном из них основной проект https://github.com/tdd-elevator-training/snake, а другой я писал давненько в отдельном локальном репозитории. Недавно я их решил замерджить. Что и сделал локально в IDE без вопросов - слил файлы, разместил в новом пакете, исправил ошибки компиляции, исправил тесты, дописал интеграционных, потестил ручками - все работает! Но теперь я хочу, чтобы у меня осталась история с локального репозитория (подключаемого проекта), а не только мой мердж.

Итого я имею локально:
- незакомиченный смердженный codenjoy проект с локальным git репозиторием (proj#1).
- удаленный репозиторий https://github.com/tdd-elevator-training/snake (тоже proj#1)
- второй локальный проект (proj#2), из которого брал исходный код для мерджа, хитори которого хочу сейчас сохранить.

Что буду делать? На ум напрашивается вот что:
- подготовить локальный репозиторий proj#2 (помувать папки куда надо) чтобы при мердже с основным он лег в нужное место, закоммитить
- за'pull'ить с удаленного репозитория proj#1 в локальный репозиторий proj#2 все-все, закоммитить мердж
- добавить все изменения из смердженного локлаьного proj#1 в локальный proj#2, закоммитить
- за'push'ить содержимое репозитория proj#2 на удаленный репозиторий proj#1

Что получилось:
User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ mkdir CodingDojo

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ git mv src CodingDojo

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ rm -rf pom.xml

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ rm -rf .idea/

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ rm -rf target/

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ rm -rf .gitignore

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ rm -rf RubicsCube.iml

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ ls
CodingDojo

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ git commit -m "перенес папку перед мерджем"
[master 2ec6dd1] перенес папку перед мерджем
 30 files changed, 0 insertions(+), 0 deletions(-)
 rename {src => CodingDojo/src}/main/java/com/apofig/Color.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/Command.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/CommandParser.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/Cube.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/Edge.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/Edges.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/Face.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/FaceValue.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/Line.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/Neighbor.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/B.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/B2.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/B_.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/D.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/D2.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/D_.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/F.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/F2.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/F_.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/L.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/L2.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/L_.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/R.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/R2.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/R_.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/U.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/U2.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/U_.java (100%)
 rename {src => CodingDojo/src}/test/java/com/apofig/CubeTest.java (100%)
 rename {src => CodingDojo/src}/test/java/com/apofig/FaceValueTest.java (100%)

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ cd CodingDojo/src/main/java/com/

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main/java/com (master)
$ mkdir codenjoy

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main/java/com (master)
$ mkdir codenjoy/dojo

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main/java/com (master)
$ mkdir codenjoy/dojo/rubicscube

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main/java/com (master)
$ mkdir codenjoy/dojo/rubicscube/model

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main/java/com (master)
$ git mv apofig/* codenjoy/dojo/rubicscube/model

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main/java/com (master)
$ rm -rf apofig/

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main/java/com (master)
$ cd ..

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main/java (master)
$ cd ..

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main (master)
$ cd ..

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src (master)
$ cd test/java/com/

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ mkdir codenjoy

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ mkdir codenjoy/dojo

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ mkdir codenjoy/dojo/rubicscube

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ mkdir codenjoy/dojo/rubicscube/model

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ git mv apofig/* codenjoy/dojo/rubicscube/model

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ rm -rf apofig/

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ git commit -m "перенес папки перед мерджем"
[master b6b73e2] перенес папки перед мерджем
 30 files changed, 0 insertions(+), 0 deletions(-)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/Color.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/Command.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/CommandParser.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/Cube.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/Edge.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/Edges.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/Face.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/FaceValue.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/Line.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/Neighbor.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/B.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/B2.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/B_.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/D.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/D2.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/D_.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/F.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/F2.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/F_.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/L.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/L2.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/L_.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/R.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/R2.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/R_.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/U.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/U2.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/U_.java (100%)
 rename CodingDojo/src/test/java/com/{apofig => codenjoy/dojo/rubicscube/model}/CubeTest.java (100%)
 rename CodingDojo/src/test/java/com/{apofig => codenjoy/dojo/rubicscube/model}/FaceValueTest.java (100%)

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ git remote add origin https://github.com/tdd-elevator-training/snake.git

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ git pull https://github.com/tdd-elevator-training/snake.git
warning: no common commits
remote: Reusing existing pack: 28222, done.
remote: Total 28222 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (28222/28222), 62.10 MiB | 196.00 KiB/s, done.
Resolving deltas: 100% (8506/8506), done.
From https://github.com/tdd-elevator-training/snake
 * branch            HEAD       -> FETCH_HEAD
Auto-merging .gitignore
CONFLICT (add/add): Merge conflict in .gitignore
Automatic merge failed; fix conflicts and then commit the result.

// ручками пофиксил конфликт

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master|MERGING)
$ git commit -a -m "merge"
[master d3378ff] merge

// залил последние незакоммиченные изменения 

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ git commit -m "залил последние изменения"
[master d3378fe] залил последние изменения

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ git push https://github.com/tdd-elevator-training/snake.git
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

Username for 'https://github.com': tdd-elevator-training
Password for 'https://tdd-elevator-training@github.com':
Counting objects: 453, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (259/259), done.
Writing objects: 100% (441/441), 38.56 KiB | 0 bytes/s, done.
Total 441 (delta 162), reused 0 (delta 0)
To https://github.com/tdd-elevator-training/snake.git
   b5c78e4..d3378ff  master -> master 

Пригодится...

Читать себя

Ты читаешь книги? 
Нет я читаю себя...

мы с Оно
Часто задают этот вопрос. Часто на него отвечаю именно так. Что значит "читать себя"? Ну к примеру я никогда не знаю, чем закончится мой пост в блоге. Я фрирайчу. И под конец поста случается так, что открываю что-то новое, что даже изначальное название  поста приходится менять. 

Почему так случается, не сильно для меня сейчас важно. Важно что есть что-то, с кем/чем я могу пообщаться у кого, спросить совета. Что отвечает мне всегда с любовью. Может быть это и есть то, что верующие называют Богом. А мой фрирайтинг - молитвой. Не знаю, в того Бога, что в Библии описан не верю. Мой Бог говорит, что я хороший, что бы не сделал. Он говорит мне, что все опыт. Он мне говорит, что греха нет. Он не будет меня наказывать. Никогда. Он так меня учит. Своим примером. И я меняюсь. 


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

Вот я написал этих два абзаца. Думаешь я планировал их? Я им просто не мешал появиться тут. Выключил критику. Мне и моему Критику еще потребуется некоторое время, чтобы осознать то, что тут написал.  

И не надо определенного времени, места, ритуала. Он всегда рядом. Предлагает что-то попробовать. На секундочку, когда я замолкаю, успокаиваюсь, расслабляюсь я его слышу в мысях, в воспоминаниях в своем ощущении Хочу. На остановке. В метро. За рабочим местом. В душе. В кровати. На прогулке. На совещании. Не зависимо от погоды. Не зависимо от моего настроения. Но если я хочу внимательно послушать его я фрирайчу. А потом перечитываю и удивляюсь простоте того, что узнал. 

С любовью. Упрощающий. Это его почерк.

Я просто...

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

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

Это один контейнер. Контейнер Эгоизма. 


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

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

Это другой контейнер. Контейнер Любви. 


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

Как-то так.

Зачем человеку так много?

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

Кейс 1 Покупаю билеты на вокзале. Подходит ко мне старенький дедушка. Просит полушепотом что-то. Понимаю, что денег просит. Заглядываю в кошелек, а там только одна 5ка мелкими и 2 по 200 грн на дорогу (билет+покушать) домой. Даю 5 грн. Он мне - "спасибо". Рассчитался я за билет и тут получая сдачу на руки вдруг появляется  в голове вопрос "а с какого перепугу я решил, что ему 5 грн сегодня хватит?", а потом сразу же следующий "а ты отдай ему все, слабо?". Сдачи с билета осталось 130 грн. 4 часа в поезде могу и перебиться без всякого вредного - поем уже дома. Больше не думал - взял и отдал, чтобы не долго думать - а то жаба обычно включается в такие моменты. 

Кейс 2 Та же касса. Покупаю билеты. Денег есть (400 грн) как на 1й класс так и на 2й. Разница в стоимости не существенная - где-то 100 грн. Разница в поезде ощутимая. Что выберу? Наверное выберу 1й класс. Я жеж заработал эти деньги, я заслужил. Я все сделал для того, чтобы они у меня появились. Я работал по многу часов. Возьму первый! И поем конечно же в поезде. А теперь вернем сюда дедушку того. Он подошел, попросил (но после моего этого решения) - а у меня всего-то 5 грн и осталось (ну и на еду, я жеж заслужил ее, так?). А ему и 5 грн хорошо. Только вот если я сэкономлю в ущерб себе (класс не 1й, а 2й, кушать не в поезде, а дома) то ему этих денег хватит на неделю. Хорошо, он появился до того, как я заплатил за билеты. Хорошо, вопрос в голове возник "а отдай все, слабо? заработаешь ведь еще - молодой!". А если бы этого всего не случилось - думал бы я о том, что кому-то эти деньги нужны больше чем Укрзализнице? 

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

Итого каждый день есть масса вариантов: 
☺купить мобильный телефон так чтобы звонил - нокию за 200 грн, или купить последний айфон - тучу денег, потом разбить его и париться по этому поводу.
☺купить простой велик, чтобы ехал или купить самый навороченный вел (я жеж заслужил, нет?)
☺снять квартиру попроще и жить там с другом или снять одному себе 3х комнатную квартиру
☻на секономленные деньги купить еще какую-то хрень, либо отдать их нуждающемуся

Как часто я задумываюсь, о всех нуждающихся в момент, когда трачу на себя-любимого?  Допустим в 20% случаев. Теперь следующий вопрос. Как часто я задумываюсь, если вижу как кто-то другой тратит несоизмеримо больше (чем обычно я) на вещи (мне не понятные), при том, что другие голодают? Тех же 20%. Не уверен. Иначе бы не было пословицы про бревна, соринки и глаза. 

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

А где-то там кто-то в это время голодает... 

Обставился вещами и ничего не делаешь с ними. Работаешь - покупаешь - ставишь на полочку - снова работаешь - снова что-то покупаешь... А где жизнь то? Где использование? Нафига это складирование? Не пользуешься чем-то подари кому-то. Ааа, жаль? Себя жалеешь, что вещью-то не попользовался - ну так пользуйся, наслаждайся. Сколько там той жизни. 

А других оставь в покое. У них свои проблемы. Можешь помочь ему получить кайф от жизни вместо складирования предметов на полке - сделай. Не можешь - не критикуй. На его месте ты сделал бы так же (если не хуже).

Ну и мультик по теме


Что такое жизнь?

Определение по Википедии
Жизнь — активная форма существования материи, в некотором смысле высшая по сравнению с её физической и химической формами существования; совокупность физических и химических процессов, протекающих в клетке, позволяющих осуществлять обмен веществ и её деление... Более или менее точно определить понятие «жизнь» можно только перечислением качеств, отличающих её от нежизни. Биологическое проявление жизни характеризуется: организацией, метаболизмом, ростом, адаптацией, реакцией на раздражители и воспроизводством.
Сколько стоит жизнь? В первом приближении можно подумать о том, что я как человек вначале должен дать жизнь другому человеку, помочь ему дойти до определенного момента самостоятельности и потом смогу оценить. По моему что-то важное упускаем. Я изначально наделен всеми функциями по воспроизводству - зачать ребенка дело не хитрое. Не хитрое дело его и воспитать (чую недовольных). Да да не хитрое. Поясню.


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

Я как программист могу попробовать оценить эту работу. Допустим исходный материал - химия, физика, элементы в таблице Менделеева. Собери из них устройство, которое будет себя само себя как минимум воспроизводить. У тебя нет ни единой зацепки, только химические элементы. Может ты даже не в курсе химии. И ты не знаешь ни про ДНК, ни про Рибосому. У тебя нет ни одной живой клеточки, чтобы взять ее за пример (как сейчас делают микробиологи).


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

Следующая задача - написать программу создающую рибосому. Потом надобно бы защитить эту утробу от внешних воздействий. Потом клетке необходим митоз. По ходу придется решить еще массу всяких сложностей. И вот чудо! У тебя есть одноклеточная бактерия. Поздравляю!

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


Сколько информации содержится в ядре клетки 1 человека? Например тут считается, что во всех 46 хромосомах клетки содержится 20·1016 пар нуклеотидов. А вот тут можно найти цифру в 3х109 пар нуклеотидов. Истина где-то посередке. Но порядок можно уяснить как ~1 миллиарда строк кода. Этот код приводит к тому, чтобы система из 100 тысяч миллиардов клеток работала. Рендомом задолбаешься перебирать. Придется писать самому.

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

Вот когда осознаешь это - тогда сможешь представить сколько стоит 1 человеческая жизнь. 


Но и тут не все. У тебя были законы природы сразу. А представь, что тебе бы пришлось и их написать? Собрать всякие там кварки-бозоны-шмарки в атомы, придумать электрон. Придумать ядерные силы. Придумать электромагнитные силы. Придумать гравитацию. Черную материю и энергию. Потом бабахнуть это все и подождать 100500 лет, пока не образуются галактики, на одной из которых у одной из звезд сложится условия, пригодные для создания органического компьютера, который будет сам себя воспроизводить, эволюционировать - жить. 

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



Вот сколько стоит жизнь по моему. Она стоит до хре на. Но просрать ее можно очень просто. Что такое просрать? Ну например лишить себя или кого-то ее. Разберемся с этим?  

Что будет после смерти? Жизнь продолжится. Как так? Просто. Жизнь - это нечто большее чем просто мои 100 триллионов моих клеток и опыт закодированный в моей бошке. Есть много уровней жизни. 

Когда человека не станет - его жизнь на уровне его конкретного тела прекратится. Но Земля, как живой организм продолжит жить. Земля - это 1 живой организм, а мы все + звери + растения + грибы + вирусы + бактерии - это все ее клетки. Более того, идеи этого человека останутся жить как минимум в головах у тех людей-клеток, с которыми он взаимодействовал при жизни. А если он еще и блоггер :) ну ты понял в общем... Идем дальше. 


Я как 100 триллионов клеток не парюсь о том, что порезал палец. Там у меня сейчас умерло тысячи клеток. Фигня - вырастут еще. Так почему же я должен беспокоиться о том, что я как клетка Земли перестану существовать? Ну да, у меня есть моцк и там есть такая хрень, как сознание - она отделяет меня от всех и считает что я как бы независим. Ага, щас. Сколько на Луне сам проживешь? Говорят, если пчел не будет, то люди вымрут через пару-тройку лет. Зависим еще как, что бы Сознание не твердило-там по свое Я.  

В общем, немного этого Я надо расслаблять. Мы все клетки Земли и у каждого своя миссия (или функция, кто как себе выбрал) тут, определенное время жизни (всего ~700 000 часов) отведенное на этот проект.  



Но даже если в Землю бабахнет большой метеорит и все живое истребит. Все-пре-все. Жизнь никуда не денется, поскольку останутся законы физики и химии, благодаря которым все само собой произойдет где-то в другом месте. И даже информация, которую я тут пишу, уверен не пропадет. Да оно все размешается после большого конца Земли. Но информация никуда не потеряется. Я могу написать тут А, а могу Б. Мог бы написать Б, потом А. Я сам принимаю решение, какой будет результирующая информация в этом посте. В процессе написания я меняю по всему миру состояния 100500 устройств, каждое из которых меняет окружающую среду. Мои посты это не только намагниченность на каком-то там винчестере.... Ну в общем тут эффект бабочки - ты жеж сам знаешь про него. И вот если бабахнет метеорит и все сотрет в пыль, в ней (уже пыли) будут все мои посты в блоге. И их можно будет декодировать. В это верю. 


А еще когда-нибудь вселенная расширится до таких размеров, что жизнь (такая как на Земле) больше не сможет существовать. Но кто сказал, что черные дыры не живые? Они ходят себе тихонечко, пылесосят все вокруг. Стирая информацию :) 


Так что жизнь это не только Я и мое тело. Жизнь везде. Жизнь всегда. Жизнь - это трехмерное пространствовремя + информация о том, кто/что в этой точке сейчас находится. 

Как-то так. 


Кстати, как программист я могу понять Создателя. Как миниум у меня есть инструмент для создания миров, в которых возможна жизнь.


 


пятница, 21 февраля 2014 г.

О наркозависимости и немного о подаче информации


Учимся, тренера!

Такой учитель сможет увлечь любого ребенка. И не важно как интересно там на улице. И не интересно, что там в интернетах на телефоне. Это не дар - это можно развить. При желании...

А еще про шкалу эмоциональных тонов классно рассказано.

А вот еще

Ретроспективы не работают! Часть 2

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

☺Ретроспективы не работают. 100%. (с)

☻Не работает почему?

☺К концу итерации память притупляется.
☺Люди не любят чувствовать себя виноватыми.
☺К моменту ретроспективы проблемы решать было поздно.

☻Это проблемы, это понятно - они у всех есть. А что было хорошо на подобных митингах?

☺Ну мы пиво иногда пили

☻а еще?

☺Иногда в мафию играли)

☻что радовало?

☺Травили байки
☺К работе никакого отношения

☻Это ок! Что радовало? Что приятно и полезно вспоминать?

☺Просто рутинная процедура, которую типа нужно провести

☻Представь, что тебе еще один раз пришлось бы провести "ретроспективу" но совершенно по твоим правилам. Как бы ты ее провел теперь? Если бы никто не знал как она проходила раньше - ты впервые им показываешь новый инструмент. Как бы ты все сделал?

☺Я бы ее не стал проводить, я бы сделал все, чтобы она была не нужна. Потому что она не нужна.

Вооот! "Я бы ее не проводил". Только что мы провели ретроспективу над процессом ретроспективы. Результат может и не принес удовольствия, но я получил понимание того, что приносило удовольствие и что сейчас формальные мероприятия лучше не проводить. Мне этого достаточно. Ретроспективу в топку! Она тут не работает.

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

Эта работа проделывается наедине. Так называемая саморетроспектива. Коль уж тебе, тимлид, нравится этот инструмент - проделывай его так же и над собой ;). Итак "Что мне нравится в ретро?" 

Я люблю узнавать что-то новое от команды что-то, что потом могу применить для себя.
Я люблю делиться знаниями, о том, что узнал от других команд. 
Моя задача сделать проект успешным, я на это закомитился (заметили, я не сказал "я люблю")
Если убрать все лишнее для команды от ретроспективы и оставить то, что важно для меня. Что получится? Попробуем сделать морфинг

♥ Больше веселья. Лучше, если не по работе вообще собрание => ♠ ок! мы будем чаще играть в игры
♥ Меньше формальности => Ок! Мы будем делать это спонтанно, по общему пожеланию. Без всяких блокнотов, ручек, планирования, митингрумов, ведущих, стенографистов.
♥ Никакого обсуждения фейлов и чувства вины => ок!  а мне по-хорошему это и не надо было, я хотел узнать что-то полезное что могу применить для себя. Давай буду спрашивать об этом напрямую - что ты можешь рассказать такого,  что проперло тебя? Какой челлендж ты прошел с  прошлым таском? И да, я никакой формальности - я не буду тебя спрашивать об этом когда мне это приспичит - я буду выжидать, когда ты готов будешь этим поделиться со мной. И я тебя выслушаю.
♥ И да! - никаких "ретроспектив" => Ок, назовем это пуреконтазадия. 
Че? => Ну, как - пуреконтазадия. Ну когда ты внимателен к своей команде, и при удачном случае спрашиваешь "уау, чувак! как у тебя это получилось?" или "ты крут, расскажи, над чем работаешь сейчас?" Никаких формальных собраний на эту тему - просто если подвернется случай. А освободившееся время лучше провести с фаном в игру в мафию, за пивком. Вот что такое "пуреконтазадия".
А ну ок, называй как хочешь - лишь бы все как мы просили!

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

"'Уау, это было круто! Как ты это сделал?"
"Эй, а что еще ты собираешься еще начудить такого?"
Не формально, без собраний, без принуждений, без формата, размазанное по деливери, в группах или без, с фаном и в помощь обоим сторонам.
Вот что я сейчас называю ретроспективой. И это у меня работает на 100%, потому как приносит удовлетворение моих запросов и запросов моих друзей. 

Почему я продолжаю это называть ретроспективой? Потому что я к этому пришел путем экспериментов с ретроспективами (весьма неудачных на старте). Начав применять к тому, что я делал - то что я знал. Ретроспективил свой процесс ретроспектив. И уверенность, что ретроспектива - это инструмент, который работает - дает мне то, что у меня получилось из формальной ретроспективы что-то успешное путем применения к изначальной формальной ретроспективе самой формальной ретроспективы. 

Чтобы все получилось на ретроспективу стоит смотреть немного рекурсивно.

Что я делал не так?
 - собирал насильно людей в комнате чтобы сделать то что НАДО вместо того, чтобы помочь им сделать то, что они ХОТЕЛИ
- говорил про ПРОБЛЕМЫ вместо того, чтобы похвалить за то, что считал КЛЕВЫМ
- делал это (похвалить) не тогда когда они этого ЖДАЛИ, а тогда когда этого ХОТЕЛОСЬ МНЕ
- делал это НА ЛЮДЯХ, игнорируя потребность людей оставаться анонимусами, скромничать
Это все мои ошибки были. Я их осознал. Просто хотел, чтобы у меня работало на 100%.

Ну а в целом да - формальные ретроспективы не работают на 100%   

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

Как-то так.