суббота, 24 марта 2012 г.

Управление ресурсами в Symfony2





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

Статья называется "Управление ресурсами в Symfony2". Поэтому хочу сразу оговориться, что я понимаю под словом "ресурс" (англ. asset). В данной статье под термином "ресурс" я подразумеваю HTTP ресурс, запрашиваемый браузером во время загрузки документа, т.е. это javascript файлы, css файлы, изображения и т.д.

Итак, приступим. В официальной документации по Symfony2 можно прочитать, что включать ресурсы в шаблоны нужно так:

// css
<link href="{{ asset('/css/main.css') }}" type="text/css" />


// javascript
<script src="{{ asset('/js/main.js') }}" type="text/javascript"></script>


// images
<img src="{{ asset('/images/header.png') }}" alt="" />

Но для чего же нужна функция asset()? Почему не желательно указывать в атрибутах href и src относительный путь к файлу на сервере? Давайте разберемся.

Я взял для демонстрации несколько файлов из Blueprint CSS Framework и подключил их в шаблоне таким образом:

<link href="{{ asset('/css/blueprint/reset.css') }}" type="text/css" media="screen, projection">
<link href="{{ asset('/css/blueprint/grid.css') }}" type="text/css" media="screen,  projection">
<link href="{{ asset('/css/blueprint/forms.css') }}" type="text/css" media="screen,  projection">
<link href="{{ asset('/css/blueprint/forms.css') }}" type="text/css" media="screen,  projection">
<link href="{{ asset('/css/blueprint/typography.css') }}" type="text/css" media="print">
<!--[if lt IE 8]><link href="{{ asset('/css/blueprint/ie.css') }}" type="text/css" media="screen, projection"><![endif]-->


Если больше ничего не настраивать в конфиге, то Symfony отрендерит приведенный кусок шаблона в такой html:

<link href="/css/blueprint/reset.css" type="text/css" media="screen, projection">
<link href="/css/blueprint/grid.css" type="text/css" media="screen,  projection">
<link href="/css/blueprint/forms.css" type="text/css" media="screen,  projection">
<link href="/css/blueprint/forms.css" type="text/css" media="screen,  projection">
<link href="/css/blueprint/typography.css" type="text/css" media="print">
<!--[if lt IE 8]><link href="/css/blueprint/ie.css" type="text/css" media="screen, projection"><![endif]-->

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

1. Множественные домены

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

Так как у меня всего один сервер, да и тот локальный, я просто прописал несколько доменов в /etc/hosts, а затем добавил эти же алиасы в конфигурации виртуального хоста. Теперь в конфигурационном файле я могу задать базовые URI для загрузки ресурсов:

framework:
    templating:
        assets_base_urls:
            - http://asset1.test.local
            - http://asset2.test.local
            - http://asset3.test.local
            - http://asset4.test.local
            - http://asset5.test.local


Тогда наш кусочек шаблона выведется как-то так:

<link href="http://asset2.test.local/css/blueprint/reset.css" type="text/css" media="screen, projection">
<link href="http://asset3.test.local/css/blueprint/grid.css" type="text/css" media="screen,  projection">
<link href="http://asset1.test.local/css/blueprint/forms.css" type="text/css" media="screen,  projection">
<link href="http://asset1.test.local/css/blueprint/forms.css" type="text/css" media="screen,  projection">
<link href="http://asset5.test.local/css/blueprint/typography.css" type="text/css" media="print">
<!--[if lt IE 8]><link href="http://asset5.test.local/css/blueprint/ie.css" type="text/css" media="screen, projection"><![endif]-->

Т.е. Symfony добавит к каждому относительному пути указанному в функции asset() один из базовых URI из конфига. Я не разбирался с тем, в каком порядке будут подставлены URI из конфигурационного файла, могу лишь сказать, что последовательность всегда одна и та же. Т.е. если мы использовали один домен для загрузки ресурса, то этот ресурс для пользователя всегда будет загружаться с выбранного домена. В другом случае эта фича не имела бы смысла, т.к. все ресурсы кешируются браузером. И браузер понимает ресурс с другого домена как уникальный и скачивает его вместо того, чтобы использовать закешированный.

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

Дело в том, что браузеры имеют ограничения на количество открытых соединений к одному домену. В таблице ниже приведено количество возможных одновременных соединений с одним доменом для разных браузеров (информация не проверена).


Browser HTTP/1.1 HTTP/1.0
IE 6,7 2 4
IE 8 6 6
Firefox 2 2 8
Firefox 3 6 6
Safari 3,4 4 4
Chrome 1,2 6 ?
Chrome 3 4 4
Chrome 4+ 6 ?
iPhone 2 4 ?
iPhone 3 6 ?
iPhone 4 4 ?
Opera 9.63,10.00alpha 4 4
Opera 10.51+ 8 ?



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

2. Сache busting


Как я уже говорил, все ресурсы кешируются на стороне клиента (т.е. браузером). Но что делать, если вы, скажем, обновили стили и пользователям нужно загрузить новую версию стилей, а старая версия находится в кеше. Решение в данном случае простое. В запрос нужно просто добавить какое-нибудь уникальное значение. URI ресурса в этом случае поменяется и браузер загрузит новую актуальную версию. И совсем не обязательно сообщать пользователям: "Мы там стили обновили. Почистите в Вашем браузере кеш, пожалуйста!" :)

В Symfony2 можно просто указать в конфиге версию ресурсов. Например, я добавил в свой конфиг такие строки:

framework:
    templating:
        assets_version: 1.0.0

и получил такой html:

<link href="http://asset2.test.local/css/blueprint/reset.css?1.0.0" type="text/css" media="screen, projection">
<link href="http://asset3.test.local/css/blueprint/grid.css?1.0.0" type="text/css" media="screen,  projection">
<link href="http://asset1.test.local/css/blueprint/forms.css?1.0.0" type="text/css" media="screen,  projection">
<link href="http://asset1.test.local/css/blueprint/forms.css?1.0.0" type="text/css" media="screen,  projection">
<link href="http://asset5.test.local/css/blueprint/typography.css?1.0.0" type="text/css" media="print">
<!--[if lt IE 8]><link href="http://asset5.test.local/css/blueprint/ie.css?1.0.0" type="text/css" media="screen, projection"><![endif]-->

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

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

Чтобы реализовать такое поведение, снова отредактируем конфиг:

framework:
    templating:
      assets_version_format  : %%s?v=%%s

И проверим, что же у нас получилось:

<link href="http://asset2.test.local/css/blueprint/reset.css?v=1.0.0" type="text/css" media="screen, projection">
<link href="http://asset3.test.local/css/blueprint/grid.css?v=1.0.0" type="text/css" media="screen,  projection">
<link href="http://asset1.test.local/css/blueprint/forms.css?v=1.0.0" type="text/css" media="screen,  projection">
<link href="http://asset1.test.local/css/blueprint/forms.css?v=1.0.0" type="text/css" media="screen,  projection">
<link href="http://asset5.test.local/css/blueprint/typography.css?v=1.0.0" type="text/css" media="print">
<!--[if lt IE 8]><link href="http://asset5.test.local/css/blueprint/ie.css?v=1.0.0" type="text/css" media="screen, projection"><![endif]-->

Как вы поняли в параметре assets_version_format задается шаблон для sprintf(). Только знак процента нужно дважды указывать для экранирования.

На этом на сегодня все. И сделаем свои приложения лучше... с Symfony2!

среда, 1 февраля 2012 г.

Видео с ZF Conf 2011

На сайте конференции ZFConf www.zfconf.ru выложили в открытый доступ видеозаписи докладов и слайдов с конференции, которая прошла 15 мая 2011 года в Санкт-Петербурге. До этого видео было платным.

Для получения доступа к разделу с видео нужно пройти по ссылочке http://www.zfconf.ru/2011/video/, ввести в форму имя и адрес электронной почты. Ссылка на закрытый раздел с видео будет выслана на адрес, который вы укажете.

Меня лично заинтересовали доклады товарищей из JetBrains и KnpLabs. Хотя представителей Геометрии и Sphinx тоже послушаю.

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

Единственный недостаток, в том, что в качестве хостинга видео выбрали Яндекс.Видео. Я всем сердцем ненавижу этот сервис.

Если есть желание предварительно посмотреть список докладов, это можно сделать тут.

UPD. Посмотрел несколько докладов:

1. Доклад Николая Матвеева "
Как может помочь среда разработки при написании приложения на Zend Framework?" - вообще можно не смотреть. PHPStorm - лучшая IDE, которая сейчас существует для PHP. И если вы раньше с ней не работали, только испортите первое впечатление невнятным докладом. Если работали - зря потратите время.

2. Доклад Константина Кудряшова про Behat тоже можно пропустить. Пиар и ничего больше. Хотя продукт, конечно, заслуживает внимания. Но лучше посетить офсайт и попробовать написать пару тестов.

3. "
Толстая модель: История разработки собственного ORM". Достаточно "живенько". В принципе, ничего особенно полезного нет, но интересно.

4. Доклад про Sphinx - тоже пиар. Но Sphinx я считаю, стоит пиарить, тем более так красиво, как это сделал докладчик :-)

понедельник, 30 января 2012 г.

Forma PRO. Join us!


Я работаю в компании Forma PRO. Слышали?.. Нет?.. Тогда слушайте :)

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


В Forma PRO мы занимаемся разработкой web приложений. Работаем в основном с PHP фреймворками Symfony и Symfony2. Коллектив у нас небольшой: девять прогаммистов, один админ, один менеджер. Это не считая руководства.






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


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


Если говорить о содержании работы. За год я успел поработать в нескольких проектах.  Два первых были небольшими и несложными, сроком около месяца каждый. Один из них был на CMF Apostrophe. Затем был проект побольше, уже на двух девелоперов и сроком около трех месяцев. Мы занимались переносом уже готового сайта на CMF Diem. Не очень интересно, зато я успел за это время неплохо покопаться в Diem'e. Следующий проект снова был маленьким, нужно было закончить небольшой сайт. Я просто переписал его на  Diem'е. Видимо, решив, что я уже в достаточной степени владею Symfony, мне доверили начинать новый проект самому. Он был написан где-то за месяц и получился в итоге достаточно интересным. Два последних проекта, в которых я работал, продолжаются и сейчас. Первый из них основывается на Symfony 1.4, в нем я проработал около трех месяцев. А с октября начал другой проект на Symfony2. На текущий момент маленьких проектов у нас не осталось и каждый сотрудник работает в более или менее крупной интернациональной команде. Например, в моей команде работает группа девелоперов из Бельгии и менеджер из Нидерландов.


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




И, вообще, отличительная черта нашей компании - демократия в разумных пределах, не переходящая в анархию :) Большинство общих вопросов мы стараемся решить сообща, как правило путем дебатов и голосования :)


Рабочее время у нас не фиксированное. Есть договоренность, что сотрудник должен отработать 40 часов в неделю. Но никто не следит, во сколько ты приходишь или уходишь с работы. Я, обычно, работаю с 9 до 18. Основная масса сотрудников приходит на работу в 10-11 утра.



Стараемся проводить внутренние семинары, где обмениваемся опытом. Это бывает не так часто, как хотелось бы, но с покупкой проектора, думаю, что эти мероприятия станут более регулярными. Расположение офиса достаточно удобное. 5 минут до метро Пушкинская, 7 минут до метро Университет. Проблем с парковкой, как правило, не бывает.




В качестве дополнительной компенсации компания оплачивает сотрудникам обеды, ежедневный лимит на обед составляет 50 гривен. Обычно ходим небольшими компаниями в "Старгород", "Смак", "Якиторию" или, на худой конец, в "Терку".


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


В конференц руме у нас есть большой стол на котором теперь периодически устраиваем поединки по настольному теннису :)




Что касается корпоративных мероприятий, то таких масштабных мероприятий как в NixSolutions у нас не бывает. Впрочем, довольно часто выбираемся в боулинг или в паб, или еще куда-нибудь. В августе ходили в поход на байдарках.


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


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






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


Какие знания лучше будет прихватить с собой на собеседование? Обязательно нужно знать PHP и ООП, нужны уверенные знания по MySQL и кончено же нужно иметь общее представление о принципах WEB-разработки. Все остальное не является строго обязательным. Но конечно же учтется при приеме на работу умение верстать, javascript, тестирование, опыт работы с применением agile практик, владение популярными фреймворками (особенно Symfony, Zend, Doctrine) и т. д.
Собеседовать, скорее всего, будут 3 человека. Директор, менеджер и один из разработчиков. После успешного прохождения собеседования испытательный срок для джуниор девелоперов составит 2 месяца. Для разработчиков с более выскокой квалификацией, как правило, испытательный срок длится один месяц.


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




воскресенье, 15 января 2012 г.

Новогоднее путешествие по городам с глинтвейновыми домиками


Во Львов прибываем 30 декабря в 4 часа утра. Наш туристический автобус отправляется в 8:30 с железнодорожного вокзала. А до отправления нужно еще успеть выполнить квест "Купить евро в четыре утра во Львове". Во всех ближайших обменниках евро нет, да и курс там, мягко говоря, "высоковат".
Недалеко от вокзала есть очень красивый костел Ольги и Елизаветы. Оттуда минут 40 до центра. Дорогу я знаю. И мы с Лидой решаем немного прогуляться улицами ночного Львова :)


В центре нам удалось таки успешно купить валюту, а еще сфотографироваться перед главной елкой Львова и даже пообщаться с местными жителями :)

В 8:00 садимся в автобус. Впереди нас ждут Венгрия, Словакия и Австрия и их столицы, а еще города Дьор, Хевиз и Тихонь.



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


Здание парламента в Будапеште

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



Собор святого Стефана в Вене

Карпаты. По пути к границе мы проезжали Карпаты. Я ни разу до этого не был зимой в горах. Склоны с соснами покрытые снегом – просто потрясающее зрелище! Нужно выбраться как нибудь покататься  в Карпатах на лыжах.


Карпаты зимой

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


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

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

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


Фото с гостеприимным хозяином токайских винокурен

Благородная плесень

Цены. В Венгрии цены в среднем как в Украине. В Словакии цены ниже. Отличный ужин с пивом на троих обошелся нам в 17 евро. А неплохие джинсы в торговом центре можно купить по цене от 10 до 20 евро. А вот когда мы попали в Австрию, то прочувствовали на себе, что значит "европейские цены". В Вене все в 5-10 раз дороже, чем у нас. К примеру, маленькая булочка стоит около 3 евро. Магнитик на холодильник стоит 7-9 евро. А скромный обед на двоих обошелся в 27 евро. Такой вот контраст. Особенно если учесть, что до Вены из Братиславы можно добраться всего за час.

Собор святого Стефана внутри

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


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


"Глинтвейновый домик"

Население. Для меня было большим удивлением, что тут мало людей понимают английский. Особенно тяжело было в Венгрии. А вот в Словакии отлично понимают русский и украинский. Словацкий язык тоже относится к славянской группе языков.
Во всех странах очень бережно относятся к природе. В Венгрии, например, есть специальные мосты, которые построены над трассой и предназначены для диких животных. А в Австрии действуют множество законов по защите природы.
Жители Венгрии предпочитают ездить на небольших и недорогих авто. Самый популярный автомобиль в Будапеште - Suzuki Swift. В Вене уже другие автомобили, в основном кроссоверы и седаны премиум класса. А среди производителей преобладают, конечно же, немецкие Volkswagen, BMW, Mercedes и Audi.


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

Лида в шапке "медведа"

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

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

пятница, 13 января 2012 г.

Как укротить Storm, или Оптимизируем любимую IDE



Не так давно я уже рассказывал о замечательной IDE PHPStorm от компании JetBrains. И вот, спустя три месяца использования, всплыл первый негативный момет. Я заметил, что моя IDE начала немного "притормаживать". Симптомы были следующие:
  1. При переключении с другого окна Storm зависал на пару секунд.
  2. Приложение потребляло непозволительно большое количество оперативной памяти (до 1.3 ГБ). 
В общем, я решил немного поиграться с оптимизацией. Результат превзошел все ожидания. Потребление памяти упало до 300 МБ, а отклик стал практически мгновенным. Вот, что я сделал:
  1. Переключил PHPStorm в 32-битный режим. В OS X это делается галочкой "Open in 32-bit mode" в свойствах приложения. Потребление памяти упало вдвое. После получаса работы IDE "скушала" около 700 МБ. Не будем копаться в причинах, помогло – и отлично. Идем дальше.
  2. Отключил автоматическое сканирование внешних изменений. Раздел "General" в настройках IDE. Выключаем опцию "Synchronize files on frame activation". Это позволяет избавиться от "замираний" при переключении на окно IDE. При установленной опции Storm просматривает метаданные файлов проекта на предмет внесения внешних изменений и сканирует директории на наличие новых файлов. Это происходит каждый раз когда окно IDE получает фокус. Ясное дело, что операция затратная. При большом количестве файлов в проекте, утилизация процессора скачет под 100%, отсюда и "замирания". После отключения опции для ручного запуска сканирования можно пользоваться кнопкой  "Refresh" (следующая после "Save"). 
  3. Добавил папки не содержащие кода в исключения. Для уменьшения числа файлов, за которыми следит Storm, в разделе "Directories" помечаем папки с кэшем и логами как "Excluded". 
  4. Отключил неиспользуемые плагины. Это последний шаг. Идем в раздел "Plugins" и снимаем галочки со всех ненужных плагинов. Перегружаемся, смотрим на утилизацию ресурсов. Наслаждаемся!
В результате получасового гугления и копания в настройках кредит доверия к моей любимой IDE был восстановлен. И я по прежнему могу утверждать, что PHPStorm – это единственный правильный выбор для профессиональной разработки на PHP.
Если Вы знаете еще какие-то способы увеличить производительность PHPStorm – отпишитесь, пожалуйста, в комментариях. Приятного кодинга!


воскресенье, 18 декабря 2011 г.

Linus Torvalds "Just for fun". Впечатления

Так получилось, что две последние книжки я прочитал с подачи Вадима. Я уже писал свои впечатления о "Rework" от парней из "37signals". А вчера я прочел книгу Линуса Торвальдса "Just for fun".



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

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

Не знаю, какая была основная цель у Линуса, когда он писал эту книгу, но вот некоторые мои мысли после прочтения:
  • В жизни нужно заниматься тем, что приносит тебе кайф. Я как и Линус испытываю кайф от программирования. Конечно у меня несколько другая область, я занимаюсь не системным программированием, а web-разработкой. Но это направление я выбрал вполне осознанно, как и язык PHP, как и фреймворк Symfony.
  • Успех всегда наполовину зависит от случая. 
  • Это нормально, когда человек не заглядывает далеко в будущее. Часто трудности, которые, кстати, могут и не возникнуть, отбивают всякое желание продолжать над чем-то трудится. А, вдруг, у тебя получится создать что-то действительно стоящее... Но даже если не получится, все равно ты получишь кайф от процесса работы. 
  • Навязывать свое мнение относительно чего-либо почти всегда плохо. Здорово иметь свое мнение на каждый случай, но лучше оставить его при себе. Нужно быть готовым к тому, что свою точку зрения при необходимости нужно будет отстоять. Но между защитой своего мнения и навязыванием его другим есть тонкая грань, лучше ее не переступать.
  • О преимуществах открытого ПО и совместной разработки я не буду ничего говорить. Лично для меня тут все лежит на поверхности... Я, вообще, сторонник открытости во многих вещах. Но часто жадность побуждает компании скрывать "фирменные секреты". Это в общем-то не всегда плохо, но во многих случаях этот фактор ограничивает общее развитие отрасли.
  • Интересны взгляды Торвальдса и на интеллектуальную собственность. В эпоху информационного общества интеллектуальная собственность становится едва ли ни самым прибыльным ресурсом.


В целом я получил массу положительных эмоций от чтения. Не стоит относится к книге сильно серьезно, ее стоит читать just for fun...

среда, 14 декабря 2011 г.

Иван Иванович

Позавчера не стало дедушки. Он умер 12 декабря 2011 года в возрасте 75 лет. Я знал, что последнее время дедушка болел тяжело. Хотел проведать его на следующие выходные, но... не успел.


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


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


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

Мне трудно себе представить работу комбайнера, т.к. я сам ни разу в шахту не спускался. Но я попытаюсь передать то, что слышал от других. Работа в проходке требует повышенного напряжения и внимания, постоянно несет самую настоящую угрозу для жизни. Это в условиях совершенно адских: температура под 50 градусов, ужасная теснота и позы самые различные, очень сильный шум и темнота, угольная пыль, огромные тяжести, постоянные сквозняки, вода. Для работы в проходке нужна огромная сила и нечеловеческая выносливость. Любая невнимательность, секундная проволочка может стоить жизни. Дедушка не раз получал тяжелые травмы. Конечно же, все это сказалось на здоровье. Но он никогда не рассказывал о шахте, во всяком случае мне, это всегда оставалось только с ним. Он хотел оградить от шахты свою семью. И оба сына его получили хорошее образование: мой дядя, Владимир Иванович, окончил медицинский институт, стал врачом; мой отец, Сергей Иванович, окончил авиационный институт.



После выхода на пенсию дедушка по состоянию здоровья уже работал в шахте на поверхности, в ламповой. Это отдел, ответственный за обеспечение шахтеров лампами для освещения, "коногонками", как говорят в нашем крае. Меня маленького несколько раз оставляли с дедушкой на работе, и я до сих пор помню идеальный порядок на его рабочем месте. Порядок был и в гараже, где дедушка мастерил всякие штуки: ножи, садовый инструмент, различные приспособления, удочки, поплавки, зарядные устройства, полки  и много чего другого он собирал руками, любил это делать и у него это хорошо получалось. Пока позволяло здоровье, сам и с папиной помощью ремонтировал свою машину - Жигули "тройку". Он купил ее в 76 году, но и через 35 лет машина была почти в идеальном состоянии. 


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

Дедушка любил футбол, и как большинство шахтеров, болел за Донецкий "Шахтер", радовался его успехам, критиковал за поражения. Спасибо, им, что выиграли "Кубок УЕФА" в 2009, дедушка сильно радовался этой победе. Как жаль, что он уже не сможет посмотреть финал Евро 2012.

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

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

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

Нашел на диске несколько фотографий с ним.






Тут дедушка с моей сестрой Анютой у нас на даче, год вспомнить тяжело, судя по Анюте - год 1995 или 1996. 




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



Колесниковы. Слева направо: Владимир Иванович (мой родной дядя), Андрей Федорович (мой двоюродный дядя), Сергей Иванович (мой отец), я.




А тут дедушка с младшим внуком - Всеволодом Владимировичем. Скорее всего лето 1993 (дедушке тут около 57 лет  )



Я не часто виделся с ним в последнее время. И мне трудно поверить, что его больше нет...


Покойся с миром, дедушка! Пусть земля тебе будет пухом!