14 жовтня 2013

[Russian] Мы не умеем любить

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

Раньше я писал, что можно любить воображаемый образ, персонаж из мультфильма/фильма/игры. Я ошибался: на самом деле, только так и можно любить. Нельзя любить реального человека. Даже о самых близких тебе людях ты знаешь максимум три четверти их реальности. Да что говорить о близких - ведь даже о себе ты не помнишь многого: как вел себя во втором классе, как общался с родителями в детстве, как впервые сказал слово... Кто ты на самом деле? Тот человек, которым ты себя сейчас представляешь - это может быть совсем не то, что находится в голове любящих тебя людей.

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

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

Тёплые приятные воспоминания... Именно о них вы будете жалеть и вспоминать после расставания с человеком. Будут другие моменты счастья, но они никогда не повторяются.

Это не должно и не будет мешать людям признаваться в любви. Любовь - это "теорема, которую нужно доказывать каждый день" (из фильма «Тот самый Мюнхгаузен»). Если наступает тот день, когда "теорема" будет опровергнута, значит это была не любовь, а вы лишь очередной раз нарушили обещание. Признание в любви - это и есть то самое обещание любви, но не сама любовь - ведь мы не умеем любить!

Продолжение - Paula rhei

13 вересня 2013

[Russian] 17 дней в Крыму

My Chemical Romance - Mama

Дорога

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

Из Киева в Крым GPS предлагал ехать через Смелу, Кировоград, Николаев, Херсон. Если я не ошибаюсь, это основная дорога в этом направлении. Но некоторые ее участки просто не предназначены для такого пользования. Первый момент - это очень узкий мост. На нем даже две легковые машины не поместятся одновременно. Но самая большая боль автомобилиста - участок дороги с полным отсутствием дороги. Google считает, что его можно проехать за 20 минут. Реально же это займет чуть меньше часа. Компьютер в машине мне показал, что средняя скорость на этом участке у меня была 25 км/ч. Если водитель любит свой автомобиль, быстрее ехать не будет. Обочина здесь ровнее самой дороги. И даже рейсовые автобусы едут по встречной обочине...

"Как ты, Бель?" ©


21 липня 2013

[Russian] Авто-тест, запускающий себя через GitHub

Сразу хочу предупредить, что данный код писался для собсвенного удовольствия и практического применения не имеет. Авто-тест открывает в браузере GitHub репозиторий самого себя, находит свой код на странице - и запускает его. Для написания авто-теста использовался PHPUnit, phpunit-selenium (Webdriver), и велосипед самописный "микро-фреймворк". Для ознакомления с реализацией, возможностями и скринкастом моего велосипеда прошу под кат.

Немного предыстории

Как показала практика, львиную долю времени при написании авто-тестов занимает написание и поддержка локаторов для элементов страниц, в каком бы виде они не были у вас представлены: XPath, CSS selector, etc. Почему бы не позволить добавлять, редактировать и удалять их прямо во время запуска теста? С этой идеи и началась разработка моего авто-фреймворка.

Что мой фреймворк умеет?

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

Покрыт unit-тестами. А также позволяет покрывать unit-тестами добавляемые классы страниц. Фреймворк старается следовать принципам SOLID, и класс страницы содержит тяжелый класс сессии (PHPUnit_Extensions_Selenium2TestCase) лишь как внешнюю зависимость.

Имеет все "плюшки" PHPUnit фреймворка. Нужен метод setUp() или tearDown()? - Пожалуйста. Нужен метод setUpBeforeClass() или tearDownAfterClass()? - Пожалуйста (В этом случае используется статический метод для создания объекта сессии). В любом из этих методов мы можем продолжать обращаться к selenium серверу.

Использует Composer для установки компонент. Вряд ли это можно преподносить как "фишку" (это уже мейнстрим). Но все же приятно в одну комманду иметь подготовленное для авто-тестов окружение.

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

Пару слов о рекурсии...

Тех, кто не поленится склонить проект прошу обратить внимание, сколь мало усилий и изменений потребовалось, чтоб написать тест-кейс для двух страниц на GitHub. Файлы в папке var были сгенерированы с помощью описанной выше фичи фреймворка. При написании пришлось столкнуться с тем, что иногда при нажатии на папку/файл навечно зависает лоадер - и не подгружается контент выбранного элемента (для этого были добавлены try-catch блоки в код). Также на Firefox в данном тест-кейсе вылетает исключение "waiting for evaluate.js load failed" (на других сайтах, кроме GitHub, данной проблемы не было). Есть подозрение, что это баг Firefox драйвера, поскольку в Chrome все нормально. Сам тест-кейс определяет свой относительный путь в репозитории, идет по этому пути в GitHub, открывает raw (для упрощения) исходник самого себя, определяет, с какой по какую строчку нужно себя запустить, и запускает с помощью eval().

Послесловие

Четких планов по поводу дальнейшего развития "микро-фреймворка" нету. Как я уже писал выше, код писался лишь для собственного удовольствия. Но предложения, конструктивная критика и push-request-ы будут обязательно рассмотрены.

Скринкаст



P. S. Копия статьи на habrahabr.ru. Мой аккаунт ждет твоего инвайта.