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


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

воскресенье, 31 мая 2015 г.

Как я решаю вопросы когда сомневаюсь

Допустим выбор стоит - согласиться на оффер или нет. Беру лист А4 и делю его вертикально пополам, а потом кажду половинку пополам. Чтобы было 4 колонки. Колонки должны быть такие:

  • Приму оффер (плюсы)
  • Приму оффер (минусы)
  • Не приму оффер (плюсы)
  • Не приму оффер (минусы)

Выписываю пунктов по 20 в каждую так, чтобы наверняка выговориться. Важно понимать не только что ты получишь приняв решение, и что НЕ получишь приняв его.

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

Меня часто спрашивают, что делать А или Б. Я могу сделать выбор для себя, но свой выбор ты должен сделать сам. И ответственность за него на тебе. А я лишь могу тебе помочь вытащить из тебя информацию. Не более...

Успехов!

Нашел себе Ментора

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

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

Вот так вот, совершенно случайно, и нашел себе Ментора.


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

А пока погуглю о нем чуть больше. 

Только сегодня

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

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

Так, об чем это я? Уже неделю я встаю "только сегодня" в 5-6 утра и делаю много всякого интересного, в том числе заглядываю в холодильник около 7 утра в поисках что бы пожевать. На этот раз приготовленного ничего не нашел и решил "только сегодня" позавтракать сырой капутой. Тут же мысль о посте в блоге, который я тоже "только сегодня" напишу и опубликую. 

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

Вчера вот на FB запостил мысль, взятую из контекста общения с одним хорошим человеком. 
Когда ты делаешь что-то раз, говорят - "фу как некрасиво"
Когда делаешь 10 говорят - "о чудак"
Когда делаешь 100 - "оу! да у него свой стиль"
Когда 1000 - "спросят совета..."
Делай много!...... фигни
Так что скорее всего первый раз скажут, что все не так, я все делаю неправильно, все фигня и вообще лучше не стоило этого делать. Это не должно сдерживать. Ну ок, сегодня уже сделал ведь. Все. Прошлого не вернешь. Вот придумают мшину времени - вернусь и исправлю. А пока как-то так. А завтра завтра станет сегодня и можно будет опять сделать свою первую и единственную попытку этом же направлении. Попытка будет немного другой, ведь ночью человек умирает, чтобы утром родиться снова (кто-то недавно мне сообщил об этом и оно так понравилось, что я взял на вооружение).

Вот та капуста, которая стала причиной поего первого (этого) и последнего поста в блоге сегодня.


Кстати, пока я строчил этот пост капусты не стало. Завтра она станет мной и напишет очередной пост. Но это уже буду не я, а кто-то другой. И пост он напишет свой самый первый.

Как-то так. 

воскресенье, 24 мая 2015 г.

Поднимаем OpenEdx на локали

Задача возникла поднять OpenEdx для того, чтобы поиграться с ним и посмотреть что он за зверь такой.



Так как я работаю под виндой, а мне надо (так сказали опытные админы) под линуксом все это устанавливать. Потому пришлось скачать VirtualBox и под него развернуть Ubuntu 14.04 (скачал ubuntu-14.04.2-desktop-amd64.iso). Важно! Раздел на который будет монтироваться "/" надо сделать большим - так просили разработчики (50Gb). Я сделал 100 :) - все равно виртуалку vhd делал с динамическим расширением и она занимала не больше 5Gb после установки. После получаса установки я имел красивую убунту в матрице.


После установки заходим в терминал и обновляемся до последней версии
sudo apt-get update -y
sudo apt-get upgrade -y
sudo reboot


Так как разрешение было всего лишь 640х480 пришлось ставить гостевые плагины VirtualBox. У него есть менюшка Устройства->Установить гостевые дополнения. После этого убунту предложит установить пакет, ей надо позволить. Если не получается, у убунты должен быть подмонтирован диск на котором есть исталятор - его и запускаем. Дальше снова ребутимся и теперь разрешение перестраивается под размеры окна. Спасибо!

Теперь будем делать матрицу в матрице. Надо установить VirtualBox на Ubuntu (я взял ту, что  AMD64). Просто скачал в браузере файл и запустил его гуйовым установщиком по умолчанию. Так же проделал с Vagrant (поставил тот что  Debian 64 bit).


Заходим в терминал и как велено в мануале по установке FullStack выполняем команды я на это время находился в корне /
mkdir fullstack
cd fullstack
curl -L https://raw.githubusercontent.com/edx/configuration/master/vagrant/release/fullstack/Vagrantfile > Vagrantfile
vagrant plugin install vagrant-hostsupdater
export OPENEDX_RELEASE="named-release/birch"
vagrant up
После выполнения последней команды варгант будет выкачивать большой файл (~3-4Gb) из сети. У меня это был вонтэтат. Потому рекомендую запастить толстым интернетом и попкорном. Или вот как я запостить какой-нибудь пост в блоге. Позже пригодится.

Но после загрузки vagrant выплюнул мне не информативаное сообщение
root@openedx-pc:/fullstack# vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'birch-fullstack'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: fullstack_default_1432361710797_91832
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
The guest machine entered an invalid state while waiting for it
to boot. Valid states are 'starting, running'. The machine is in the
'poweroff' state. Please verify everything is configured
properly and try again.

If the provider you're using has a GUI that comes with it,
it is often helpful to open that and watch the machine, since the
GUI often has more helpful error messages than Vagrant can retrieve.
For example, if you're using VirtualBox, run `vagrant up` while the
VirtualBox GUI is open.
И пришлось запустить virtualbox (под рутом). Графическая оболочка открылась, я увидел там новосозданный образ и попробовал его запустить вирчелбоксом. Но тот сообщил мне:
Failed to open a session for the virtual machine fullstack_default_1432361710797_91832.
VT-x is not available. (VERR_VMX_NO_VMX).
Видимо нельзя запускать одну виртуалку под другой - пронеслось у меня в голове. Но стэковерфлов ответил что как бы можно, но. И я решил проделать то же самое под моей родной убунтой, которую давно не пробуждал от виндовой сплячки.

Но перед тем еще одна гипотеза. Заглянув в варгант скрипт я нашел там способ, как получить на руки виртуалочкку. Вот она http://files.edx.org/vagrant-images/20150224-birch-fullstack.box Качаю... Может под виндой получится запустить. Попутно скачал вагрант под винду... 

Еще на одну гипотезу меня натолкнуло сообщение в одном из мануалов. If you have any problem installing or starting the VM with Vagrant, first check that you have the required versions of VirtualBox 4.2.16 and Vagrant 1.3.5. Ща проверим... 

С установкой нужной версии я обломался, потому попробовал засетапить варгант под винду и открыть им скачанный box файл. Попутно узнал, что box файл - это tar архив внутри которого находится виртуалка, а достав ее попробовал открыть напрямую в virtual box. Он проимпортировал себе в папку образ и открыл его. Запуск сразу не удался, там что-то с настройками сети были проблемы, но я удалил адаптер и все ок. 

Но на этом квест не закончился. Убунту загрузилась под виртуалкой под виндой и в консольке меня попросили ввести логин/пароль. А где его брать-то? :) Погуглив натолкнулся на строчку Default username/password: vagrant/vagrant и заработало! Я в системе... В консольке :) 

И как проверить, что там запущено? В мануале написано, что достать можно приложение по урлу 
Вот и попробуем curl http://192.168.33.10 и в консоле напечатался кусочек html'ины. Ура. Теперь надо вывести это за пределы виртуалки. Но как? Идем гуглить... Есть статья Настроил второй адаптер как мост и пробую запуститься... 

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

Интеренет появился после того, как на virtual box я зашел в меню Devices -> Network и клацнул на подключение, которое использовало NAT (второе подключение было настроено на мост и использовало один из моих сетевых адаптеров - без него не поднималось сервак на 192.168.33.10). Инет пошел. Поставил командой sudo apt-get install ubuntu-desktop и установка пошла. Только с ошибками, потому перед тем пришлось сделать sudo apt-get update -y и sudo apt-get upgrade -y, а потом повторить инсталяцию gui. Дальше надо было всего лишь запустить gui командой startx - тут же запустилась gui там был firefox и набрав в нем урл приложения я получил к нему доступ. Ура! 

Дальше вот так можно посоздавать юзеров и сделать других полезностей.

Если кому надо виртуалку, могу выложить. Пиши в комменты. 

суббота, 23 мая 2015 г.

GoJava! Go!

Начну с замечательного стихотворения, автором которого является один из выпускников группы, которой помагал познать Java - Григорий Кудрявцев. Кодовое название группы - GoJava2. 3,5 месяца экспериментов с кодом и процессами и вот выпуск. А там Гриша и его стих. До слез!


Ты - на контрол-пробел нажимал, я - чего то растерянно гуглил,
Красный крестик в эклипсе меня до усрачки пугал.
Ты штудировал Шилдта, ночами закрывшись на кухне,
И пленительный Хорстманн ко мне иногда забегал.

Чтоб над кодом твоим не рыдали от смеха индусы,
Я вставал по утрам, совершая коммит как намаз.
Гугл драйв девелопмент - нехитрое, вобщем, искусство -
Ты осваивал тоже, прищурив придирчивый глаз.

Пробираясь сквозь хэши, ты тихо молился: "О Боже!" -
Но магический мэйвен исполнил желания твои!
...я уныло коммитил бесстыдно божественный обжект
И раскаянья полный его по утру удалил.

Ты словил эНПэЕ, все вокруг завернув в декоратор,
Был эксепшен в идее так нов, так томительно свеж.
Ты рефакторил долго. Но ментор вернул все обратно.
Я рефакторил снова - но ментор куда то исчез!

Я про базу впервые с восторгом подумал - нормальна!
Ты её приводил - и конечно она - привелась!
Ты рефакторил метод, который считал гениальным,
Но вернувшийся ментор вообще удалил этот класс.

Как я ждал хибернейт! Ты же верил в него, как в Иисуса -
Но в нагугленном коде печально всплыло - депрекейт...
Малодушно подумав, что надо идти на прекурсы -
Я по скайпу ответил: "Прикрутим четвертый - ок!"

Я плодил интерфейсы - как дерзко ты их имплементил!
Ты наследовал классы смелея от каждой строки!
Но зачем это нужно? - тут мы потерялись с ответом -
Мы искали ответы - в два гугла, в четыре руки!

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

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

(c) Григорий Кудрявцев

А еще вот кружку подарили :) Теперь у меня есть моя, именная. Дело в том, что на кухне много кружек от разных компаний, заработанных на разных ивентах, в которых имел честь принимать участие. Но тут именная.

Написаны на ней текст программы HelloWorld на Java (хорошо, что не многопоточный синглтон) и цитата. "Я делаю - мне делают" Цитата моя. Взболтнул на одном из наших собраний пока рассказывал о чудном инструменте CodeReview. Но как и следовало ожидать моментально понято оно было не в том контексте и гагага минут на 5.

Группа стартовала в декабре месяце 2014. Где-то тогда, когда я уволился из GlobalLogic на вольные хлева. Месяц до этого была подготовка программы и инфраструктуры на площадке GoIT. Вместе с напарником Сергеем Немчинским мы стартовали две группы. 3,5 месяца их вели по программе, которую померджили с Сережей исходя из нашего прошлого опыта. Два раза в неделю встречи по 3 часа. 15 тем от Java Code Conventions до SinglePageApplication, через OOP/SOLID, Unit testing/TDD, Collections framework, JavaIO, Exception Handling, JDBC, Servlets/JSP, Linux, Maven, SpringIoC, Hibernate, SpringMVC, Rest/SOAP, JavaScript. 

Было круто! Было сложно! Мы вынуждали ребят кодить по 6-8 часов в день помимо наших собраний. Google Driven Development, работа в команде, скрип и мозоли. Но ребята это сделали! Все что мы хотели дать - это чтобы никакая технология больше не пугала ребят. Есть технология, есть пару вечеров - будет рабочий прототипчик. 

В общем молодцы все! Теперь у ребят основной квест - устроиться на работу. Провалить 10 собеседований. На 11й получить оффер...

Успехов нам!

четверг, 21 мая 2015 г.

Главное не спугнуть дикого зверя...

Як ти себе пушаєш до написання статей? Я щось з перегорів після попередніх курсів.... Досі нема бажання

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

Это способ подключиться ко вселенной и черпать оттуда знания. Когда печатаешь быстро не разбираясь. Просто все что приходит в голову. Такой себе поток мысли. Как вот я сейчас :) еще так 10 минут и будет пост в блоге. А потом чуть отредактировать очепятки, вставить пару фоток и все. Нет цели, нет заголовка. Они появятся после написания. Просто пишешь все что приходит в голову. И удивляешься тому, как много интересного там есть, внутри тебя. 

Кроме того это такой себе психотерапевтический момент. Когда разбираешься в своих мыслях

понятно. Тобто ти виділяєш собі час для фрірайтингу, пишеш все що в голові. потім перечитуєш - і народжується ідея статті?

Почти, за исключением некоторых моментов. 

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

2) Перечитыаешь в процессе. Важно не мешать этому процессу, ты просто строчишь так быстро как можешь. Чтобы еще чуть чуть почитать. Реально надо постараться сделать это так, чтобы печатал со скоростью как думаешь. Тебе должно быть самому любопытно...

Это наблюдать за каким-то животным на природе, диким. Оно тебя слышит и видит, но не убегает, пока ты не начнешь орать: "Все фигня! это бред! что люди скажут". Ты либо наблюдаешь за этим потоком. И он открывается, дает себя изучить. Либо ты критикуешь, и исправляешь ошибки, думаешь логически и нифига не выходит. 

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

И да. Cамое креативное время 2-4 утра. Когда тишина. Могу написать 10 постов, офигевший лечь спать, узнав что-то новое. Это удивительное время. Ты не представляешь как.


Вот раз рассылку делал на эту тему, собрал все что у меня есть. Ключевые слова "фрирайтинг", "утренние страницы" и "беседы с Богом". Погугли. Разные проявления одной и той же фичи мозга. Удивительной. И не важно каким каналом идет предача инфы :) Говоришь ли, поешь, танцуешь, рисуешь, пишешь...

Главное не пугать дикого зверя...


Пока не принял решение...

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

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


Трудности, которые удалось ощутить:
- Пол года свободы => пол года без ЗП => пол года в поисках денег. Очень много проб, не все приносило деньги. Часто переживал от того, что не за что буде кормить семью. Но потом как-то складывалось. Было очень страшно. Потом очень-очень. Но потом это стало входить в привычку. И уже не так страшно. Но осадок остался. 

- Те вещи которые раньше приносили удовольствие, сечас не приносят. Вернее постоянный стресс от того, что "а хватит ли денег?" разъедал все хорошее, что наполняло это время. 

- Полностью сбитый график жизни. Беспорядочно, то день, то ночь, то день, то ночь. Как следствие синяки под глазами, все то же настроение. 

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

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

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

- День, когда ничего не делал были "Саня ты чего? Вобще что-ли?". Сложно было расслабиться. Помагали сериалы, которые запоем смотрел не вставая с дивана. А потом быстро быстро нагонять. Частые приступа апатии, когда вообще ничего не хотелось делать. Вообще-вообще. Борьба с собой. Уговоры. Ведь никто не спросит за результат. Только я сам. А как оказалось я очень жесткий в этом плане к себе. 

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

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

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

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

- Осознание того, что я сам могу (всмысле без поддержки компании). Да немного коряво получилось. Да не так может эффективно как оно виделось на старте. Но блин, могу! И готов повторять. 

- Навык продавать. Если до этого заплыва было очень неубтно от того что что-то по моему мнению стоит 100$ и это надо озвучить вот этому хорошему человеку. Но теперь это в прошлом. Если что-то делаешь - это должно стоить денег. Назови стоимость вслух.

- Хороший проект GoJava в рамках компании GoIT. Я знаю, что у нас лучший Java тренинг из тех что я встречал. Лучший он не потому что там программа или материалы, а из за того, что в нем есть душа. И я понимаю, что хочу оставаться с ребятами только потому, что больше никто этого не сделает. Две выпущенные группы, еще четыре на подходе. Будущее этих ребят сильно изменится и наша команда приложила к этому частичку своей жизни. 

- Масштаб. Я еще раз преоболел барьер 10х. В GoIT пришлось отвечать за большой объем работы. Вначале было сложно. Теперь проще. Проще не потому что работы стало меньше. Просто потому, что в голове что-то поменялось. А это уже навсегда. 

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

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

К чему это я? :) Оффер от одной продуктовой компании принял. 25го выхожу на новый проект.
И да, в GoIT я остаюсь драйвить Java. А офис, где проходят собрания по дороге в новый офис. 

С чем себя и поздравляю!

Только Ты в ответе за то, что с тобой происходит...

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


Молодцы ребята!

вторник, 19 мая 2015 г.

Шашлыки с плавленным сыром

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

Началось все с того, что я познакомился с компанией GoIT :) Где 4 месяца вел группу по Java.


И в прошлую субботу у нас был выпускной. Как быстро пролетело время!


Выпускались две первых группы GoJava и две, уже не первых, группы GoQA. Все хорошие ребята. И естественно все после официальной части перенеслось в паб.


Там естественно до ночи гуляли. Афтер-афтерпати... Рассвет в парке КПИ. Ёжики. Пока фоткал их нашел mp3-плеер...


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


Но на воскресенье мы планировали шашлыки. А потому 1,5 часа сна и еще одно пати. Пати с измененным сознанием.


Конечно каждые 2 часа приходилось уходить на 15 минут в слип, но те мысли, которые происходили в промежутке очень удивляли....


Так вот я придумал такой шашлык. С плавленным сыром.


Когда шашлык уже готов, раздуваем костер, чтобы он нагрелся хорошо, поворачиваем на 180 градусов, режем тонкими пластами сыр сулугуни ставим сверху и ждем пока не поплавится. Крутить не стоит - попадает :) Через 5 минут забираем. 

Ням ням...

пятница, 8 мая 2015 г.

Красивый assertThat в стиле Mockito

На ночь глядя взялся реализовать двусвязный список на Java. Пишу тест
    @Test
    public void testAddAtAtEnd() {
        List<String> list = get();

        list.add("1");
        assertEquals("[1]", list.toString());

        list.add("2");
        assertEquals("[1, 2]", list.toString());

        list.add("3");
        assertEquals("[1, 2, 3]", list.toString());

        list.add("4");
        assertEquals("[1, 2, 3, 4]", list.toString());
    }
Неуклюже и некрасиво! Хочу так!!
    @Test
    public void testAddAtAtEnd() {
        List<String> list = get();

        assertAfter("[1]", list).add("1");
        assertAfter("[1, 2]", list).add("2");
        assertAfter("[1, 2, 3]", list).add("3");
        assertAfter("[1, 2, 3, 4]", list).add("4");
        assertAfter("[1, 2, 3, 4, 5]", list).add("5");
        assertAfter("[1, 2, 3, 4, 5, 6]", list).add("6");
        assertAfter("[1, 2, 3, 4, 5, 6, 7]", list).add("7");
    }
Для этого мне надо вот
    private <T> T assertAfter(final String expected, final T object) {
        return (T) Proxy.newProxyInstance(this.getClass().getClassLoader(),
                object.getClass().getInterfaces(),
                new InvocationHandler() {
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        Object invoke = method.invoke(object, args);
                        assertEquals(expected, object.toString());
                        return invoke;
                    }
                });
    }
Приятного!