tag:blogger.com,1999:blog-40394911996682440132024-03-14T07:19:59.344+02:00antonfin's blogWeb, perl, vim и может что-то еще...antonfinhttp://www.blogger.com/profile/17669732865782196806noreply@blogger.comBlogger8125tag:blogger.com,1999:blog-4039491199668244013.post-25296247065323371602012-01-22T23:23:00.001+02:002012-01-23T23:30:04.635+02:00Обновил свой персональный сайтСегодня обновил свой <a href="http://antonfin.kiev.ua">персональный сайт</a>, убрав все не нужное (как я считаю). Смотрите, оценивайте, пишите свои комментарии.<br />
<br />
В общем новая версия <a href="http://antonfin.kiev.ua">http://antonfin.kiev.ua</a><br />
<br />
Кстати, а чьи персональные страницы Вам нравятся больше всего?<br />
<br />
С ув. antonfinantonfinhttp://www.blogger.com/profile/17669732865782196806noreply@blogger.com1tag:blogger.com,1999:blog-4039491199668244013.post-78413586585609642222011-05-24T23:49:00.002+03:002011-05-24T23:51:34.249+03:00Скрывать или не скрывать, вот в чем вопрос<div dir="ltr" style="text-align: left;" trbidi="on"><br />
Недавно в твитере было обсуждения одного из щепетильных вопросов, который возникает в IT компаниях: "скрывать или не скрывать заработную плату сотрудников".<br />
<br />
Варианты возможных решений я выделил таким образом:<br />
1. <b>Однозначно скрывать</b>. Запрещая даже разглашение сотрудниками своих ЗП, под угрозой увольнения.<br />
<br />
2. <b>Публичное установление заработных плат</b>. Когда на ту или иную должность установлен норматив оплаты, который известен всем. Если есть доплаты, то они тоже устанавливаются открыто.<br />
<br />
3. <b>Предприятие скрывает заработные платы, но не налагает никаких запретов на оглашение, все по желанию сотрудников</b>.<br />
<br />
Я попытаюсь рассмотреть позитивные и негативные моменты связанные с <i><b>первым методом</b></i> установления ЗП.<br />
<span class="fullpost"><br />
<br />
Рассмотрим ситуацию, когда компания проводит жесткую политику по отношению к неразглашению ЗП. Чаще такой подход практикуется в компаниях с иностранным (западным) капиталом.<br />
<br />
Объясняется данный метод вполне логично, так или иначе оценить it-шника тяжело, вот как сторговались, так и сторговались, если всех все устраивает, то все отлично.<br />
<br />
Я не знаю какая у тебя зарплата, ты не знаешь какая у меня, и все находятся в неком блаженном неведении, до поры до времени, пока кто-то что-то не узнал.<br />
<br />
<i><b>История</b></i>:<br />
<br />
Однажды, Вова признался Сережи, что у него 2,5 у.е. ЗП, а Сергей, как-то даже постеснялся признаться, что у него всего 2,2 у.е. ЗП.<br />
<br />
Почему постеснялся? Да, потому что все знают, что Сергей, "педалит" в два раза больше, и опыта у него на 3 года больше по отрасли, и на пол года раньше он в компанию пришел.<br />
<br />
Вот так, или лоханулся, или в тот момент не нужны были такие специалисты? Кто уж вспомнит.<br />
<br />
А когда Вова пришел, то как раз новый проект от иностранного заказчика получили, и второпях команду собирали, плюс как раз рынок был раскочегарен, и никто на зарплату в 2.2 у.е. идти не хотел, а спецы нужны были хоть "всрись". Вот у Вовы и "прокатило" у руководства выторговать чуть больше.<br />
<br />
Понимали в руководстве, что Сережа лучше Вовы, и что получать он должен больше, но какой экономический смысл ему прям сейчас поднимать? Сережа и так "лупашит будь здоров!", Вове тоже ЗП не уменьшишь, ведь "вонизма" потом не оберешься. <br />
<br />
Так и работают!<br />
<br />
Но вот Сережа узнал, и.... Да! Начала Сережу кушать толстая жаба, и вот он уже не рвет булки, притих на собраниях, и все ему как-то пох...й, и каждые 2 месяц он по новым собеседованиям ходит, получше место ищет, или оффер покруче, чтобы у родного руководства побольше ЗП выторговать, и не просто побольше, а так чтобы наказать этих <strike>пидорасо... </strike>обманщиков. Чтоб за все полтора года, пока они его обманывали, недоплачивали, отыграться, чтоб знали...<br />
<br />
Стоп... Реальная ситуация?<br />
<br />
Вполне. Согласитесь, даже если бы у Сережи ЗП будет на 100у.е. выше, а работает он всего в полтора раза лучше, то скорее всего ему будет не совсем комфортно, ведь он круче, а доплата маленькая.<br />
<br />
Давайте разберемся почему так происходит. <br />
<br />
Природа данного метода построена на сокрытии реальной ситуации в компании при работе с персоналом, а иначе вы не получите экономических эффектов от ее использования. <br />
<br />
Плюсы от использования:<br />
1. <b><i>Гибкость</i></b>. Выигрывает от этого подхода компания, так как она получает маневренность при найме новых сотрудников, ведь не имеет значения кто и сколько уже зарабатывает, мы можем хоть в два раза переплатить, все равно об этом никто никогда не должен узнать. Можно не реагировать на растущие тенденции в ЗП. Можно дать не заслуженную надбавку сотруднику, если он собирается уходить, только из-за того, что нужно быстрее закончить проект.<br />
<br />
2. <i><b>Экономия</b></i>. Нужно помнить, что зарплаты не так уж эластичны к экономическому росту (или к тенденциям на рынке), о их изменениях мы узнаем от людей, с которыми мы можем сравнить свой труд (наилучшим примером для сравнения являются наши коллеги в компании, так как коллеги из других контор могут иметь совершенно иную сферу деятельности), а если в компании запрещено говорить на эту тему, то считайте, что в какой-то момент у вас зарплата станет ниже, чем по рынку, и чем дольше вы в неведении, тем больше экономия.<br />
<br />
Минусы. Есть 2 минуса, которые, как мне кажется, больше связаны с нашим менталитетом.<br />
<br />
1. <b><i>Мнимость тайны</i></b>. Наш человек, более "социален", мы чаще общаемся с коллегами, чаще дружим, отдыхаем, отмечаем праздники. И эта социализация имеет духовную основу, а не партнерскую, как в странах загнивающего капитализма ("Чтоб я так жил"). Поэтому риск того, что мы будем знать кто сколько зарабатывает, несомненно выше.<br />
<br />
2. <i><b>Развитое чувство несправедливости</b></i>. В наших ценностях не последнее место занимает понятие "правды" (обратите внимания слово правда, в глубоком его понимании, нет в других языках, "правда" - это не только истина, и не только закон, это что-то выше). Так вот рассмотренный случай с Сергеем, это как раз надругательство, над этим положением. У него возникнет чувство нес<u>ПРАВ</u>едливости. Скорее всего этот прекрасный сотрудник будет навсегда потерян для своей компании, если узнает, что ему явно недоплачивали.<br />
<br />
Вот такие плюсы и минусы. Конечно при правильном управлении персоналом, можно минимизировать риски минусов (если про них не забывать). Так же с учетом, того что этот метод больше применяется у иноземцев, а ЗП там выше, чем по рынку, то все, как правило, всегда довольны.<br />
<br />
В общем, дорогие управленцы, "скрывать или не скрывать" решать вам, но помните, от ваших решений зависит атмосфера в коллективе, а значит и конечный результат.<br />
<br />
<b>P.S.</b> Есть еще одна категория людей, которая <b><i>выигрывает</i></b> от такого подхода, это пронырливые сотрудники, которые получают немного выше, чем в среднем по компании, но при этом у них отдача ниже. Как правило они молчат (так как их-то за разглашения уволят сразу же).<br />
<br />
<b>P.S.S.</b> Граждане читающие, а вы как считаете скрывать или не скрывать?<br />
</span><br />
</div>antonfinhttp://www.blogger.com/profile/17669732865782196806noreply@blogger.com3tag:blogger.com,1999:blog-4039491199668244013.post-63920434279625735562011-04-19T18:21:00.005+03:002011-04-19T18:30:31.766+03:00Поиск по файлам в Vim<div dir="ltr" style="text-align: left;" trbidi="on"><br />
Выдалось немного времени, решил написать, как удобно организовать поиск по файлам в vim.<br />
<br />
Скажу стразе, что в vim есть 2 функции, которые позволяют совершить поиск по файлам <b>grep </b>- выводит результат поиска в консоль, а <b>vimgrep</b> выводит результат поиска в командную строку vim.<br />
<br />
Читайте: help vimgrep и help grep<br />
<br />
Но любители монструозных IDE могут упрекнуть, что мол часто нужно вывести результат в какое-то окошечко и оперативно просматривая результаты открывать/закрывать файлы с нужным нам контентом.<br />
<br />
Но vim был бы не vim, если бы там чего-то нельзя было сделать. Итак мой пример организации поиска по файлам в vim.<br />
<span class="fullpost"> <br />
Для организации поиска по файлам я использую плагин <a href="http://www.vim.org/scripts/download_script.php?src_id=7645">grep.vim</a> (автор <a href="http://www.vim.org/account/profile.php?user_id=244">Yegappan Lakshmanan</a>) Данный плагин позволяет удобно делать поиск и работать с результатами поиска.<br />
<br />
Кладем grep.vim в папку $VIM_HOME/plugin/<br />
<br />
Данный плагин использует утилиту grep. Для пользователей Windows автор предусмотрел переменную Grep_Path<br />
<br />
<pre class="prettyprint lang-vim" style="overflow-x:auto;">:let Grep_Path = 'с:\progs\grep.exe'
</pre><br />
У Вас появятся целая куча новых функций для работы с поиском: :Grep, :GrepAdd, :Rgrep, :RgrepAdd, :GrepBuffer, ... Тут очень детально все описано http://www.vim.org/scripts/script.php?script_id=311.<br />
<br />
Опишу лишь то, что чаще всего использую я.<br />
<br />
<b>Rgrep</b> - рекурсивный поиск по файлам<br />
<b>RgrepAdd</b> - добавляет результат поиска к результатам предыдущего поиска <br />
<b>GrepBuffer</b> - поиск по всем открытым буфферам<br />
<br />
Так же удобно забиндить какую-нибудь клавишу для поиска, я, например, использую F2 и F3.<br />
<br />
Для этого открываем vimrc и добавляем такой код:<br />
<br />
<pre class="prettyprint lang-vim" style="overflow-x:auto;">" F2 - Run recursive grep
nnoremap <silent> <F2> :Rgrep<cr>
" Shift-F2 - Same as ":Rgrep" but adds the results to the current results
nnoremap <silent> <S-F2> :RgrepAdd<cr>
" F3 - Search for a pattern on all open buffers
nnoremap <silent> <F3> :GrepBuffer<cr>
</pre><br />
Все, теперь, если Вам нужно найти что-то, просто нажимаем F2 вводим паттерн, по котором нужно осуществить поиск (по умолчанию предлагается текст под курсором), нажимаем Enter, вводим путь к файлам, в которых будет происходить поиск, Enter.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPbNcerhadDpYPpT6hLDjO4J4yRu3WsRI0FDXEtLVtrDZRiAoh10INQ58zEQtxGdInwmlXzfgFM8XUgk3X_pAUf-ocZtEgTaIUYgEggjxrxJ3h-5jSJXJmZb_H7jUHZrzbAqM0vRPqdyBQ/s1600/vim3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPbNcerhadDpYPpT6hLDjO4J4yRu3WsRI0FDXEtLVtrDZRiAoh10INQ58zEQtxGdInwmlXzfgFM8XUgk3X_pAUf-ocZtEgTaIUYgEggjxrxJ3h-5jSJXJmZb_H7jUHZrzbAqM0vRPqdyBQ/s320/vim3.png" width="480" /></a></div><br />
В отдельном окошке появляется список строк, в котором находиться запрашиваемый Вами текст.<br />
Чтобы открыть нужный нам фрагмент, наводим на него курсор и нажимаем Enter.<br />
<br />
Вот и все. В лучших традициях, так сказать, жирных IDE.<br />
<br />
<br />
Пожелание: если есть интересные задачи в vim, которые Вам не удалось самостоятельно решить, или Вы считаете, что vim такое не может, то пишите в комменты, я постараюсь найти варианты решения. За ранее благодарен.<br />
<br />
С ув. antonfin<br />
</span></div>antonfinhttp://www.blogger.com/profile/17669732865782196806noreply@blogger.com20tag:blogger.com,1999:blog-4039491199668244013.post-22022675039866124212011-04-17T22:10:00.002+03:002011-04-17T22:13:19.088+03:00Thanks to Paul Allen...У меня произошла некоторая проблема при работе с одним проектом.<br />
<br />
Я использовал модуль GD::SecurityImage при создании каптчи. Модуль удобный тем, что может использовать разные библиотеки в бекграунде, по умочанию, естественно, GD. <br />
<br />
Чисто для справки, мне больше нравиться использовать Image::Magick, но вот не могу подружить данную замечательную библиотеку с одним сервером на freebsd.<br />
<br />
В общем стала задача при определенных условиях изменять размеры картинкам. Для чего был использован замечательный модуль Image::Resize.<br />
<br />
Каково было мое удивление, когда мне утром позвонил заказчик с жалобой что все каптчи стали выдаваться с черным бекграундом. :(<br />
<span class="fullpost"><br />
Новость была паршивая, так как модуль для работы с каптчами я не трогал. При ее создании было установлен параметр bgcolor как [255,255,255], то есть явно белый. Работа с графикой в принципе поменялась лишь благодаря добавлению ресайзу картинок. Причем картинки, это были часть контента сайта, и с каптчей ни каким образом не пересекались.<br />
<br />
С начала логически, а потом экспериментально,, было выявлено, что каптча меняет бекграунд при добавлении строки 'use Image::Resize;'. Модуль где происходил ресайз и модуль для генерации капчи друг-друга не вызывали, то есть возможный ре-импорт какой-либо функции я откинул (Но оба модуля вызывались одним fcgi скриптом).<br />
<br />
Значит вызов Image::Resize, чего-то менял в окружении или в логике работы самой GD. <br />
<br />
perldoc -m Image::Resize;<br />
<br />
Жму v.<br />
<br />
Открывается vim c кодом модуля Image::Resize.<br />
<br />
10-11 строчки<br />
<br />
# Thanks to Paul Allen <paul.l.allen AT comcast.net> for this tip<br />
GD::Image->trueColor( 1 );<br />
<br />
Что за нафиг?<br />
<br />
perldoc GD<br />
<br />
Ищу метод trueColor. Пишут такое:<br />
<br />
For backwards compatibility with scripts previous versions of GD, new images created from scratch (width, height) are palette based by default. To change this default to create true color images use:<br />
<br />
GD::Image->trueColor(1);<br />
<br />
somewhere before creating new images. To switch back to palette based by default, use:<br />
<br />
GD::Image->trueColor(0);<br />
<br />
Ну что же. Можно попробовать изменить.<br />
<br />
Добавляю у себя перед созданием каптчи GD::Image->trueColor(0).<br />
<br />
И у меня создается каптча с белым бекграудом! Ура! То что нужно!<br />
<br />
Вот так фикс Пола Аллена испортила мне воскресный вечер. Thanks to Paul Allen....<br />
<br />
Если кто-то знает в чем была проблема, зачем нужно использовать trueColor и почему могла возникнуть такая бага пишите в комменты. Если ответа не поступит обещаю в последующих постах раскрыть тему глубже.<br />
<br />
<br />
С ув. antonfin.<br />
<br />
</span>antonfinhttp://www.blogger.com/profile/17669732865782196806noreply@blogger.com4tag:blogger.com,1999:blog-4039491199668244013.post-40421141986625686992011-04-11T20:40:00.003+03:002011-04-11T20:57:15.266+03:00Маркетинг vs Разработки<div dir="ltr" style="text-align: left;" trbidi="on">Не знаю на сколько адекватна тема топика, тому что будет изложено ниже. Так или иначе хочу поделиться вот такими мыслями.<br />
<br />
Время-от-времени я слышу от наших отечественных интернет-деятелей (бизнесмены, разработчики, стартаперы, CEO-шники и прочие) о том, что вот есть желание реализовать Web-систему, которая будет выдерживать высокие нагрузки, для этого ищу организацию, которая бы могла данный проект реализовать. И сразу сыпятся предложения от более-менее крупных Web-студий, что вот мы классные дядьки и готовы взяться, и вот такое у нас портфолио (банки, страховые компании, сайты торговых марок и т.д.), и мы и тем делали, и этим!<br />
<br />
Но при детальном изучении портфолио понимаешь, что половина реализованных проектов имеют столько общего с высоконагруженными системами сколько персональный сайт <a href="http://sysoev.ru/">Сысоева</a> с Web дизайном.<br />
<span class="fullpost"><br />
Ну, предположим, реализовали они какой-то крупной финансовой группе Web-сайт. Ну что, кто-то считает что там больше 20-50 тис. хостов в неделю? Ну вспомните, когда Вы последний раз заходили на сайт банка, в котором храните деньги. Я один раз, в жизни зашел, чтобы посмотреть телефон поддержки.<br />
<br />
Или вот сайт популярного футбольного клуба. Да сайт красивый, там про футболистов, интервью, но какую нагрузку он создает? Да и чем он нагружать может? Разве что контентом, но тут работы на пол дня для толкового системного администратора.<br />
<br />
Еще есть сайты для популярных учебных заведений, торговых марок, сайты поп-групп и еще очень много барахла.<br />
<br />
Но вот в чем суть-то. Все эти сайты из портфолио они имеют больше маркетинговую ценность для Web-студии, 90% знают компанию "Бла-бла-бла Банк" (выдумал), и если Вы/Ваша студия писала им сайт, то средний обыватель подумает: "Ну, это круто! Все знают банк "Бла-бла-бла Банк", и все знают facebook и google, значит эта студия сможет реализовать любой проект, будь-то Социальная сеть, или Мега-портал, или файловый хостинг".<br />
<br />
А знаете, что парадоксально. Они действительно могут...<br />
<br />
Нет, нет, они реализуют Вам прекрасную соц.сеть, которая с легкостью выдержит 10-15 тис. хостов в день (это где-то 1000 пользователей) (НО заплатите Вы, конечно, как за клон facebook-а).<br />
<br />
Вы запуститесь, а дальше... <br />
70% - не наберут и 250 постоянных пользователей, через год закроются, так как финансировать такое мероприятие, затея не из дешевых.<br />
20-25% - смогут дотянуть до 500-700 постоянных пользователей и тоже закроются.<br />
3-4% - скорее всего сумеют втюхать данный проект какому-нибудь инвестору и радоваться жизни, проект скорее всего загнется, если инвестор не наймет толковую команду, которая потихоньку все перепишет.<br />
<br />
У остальных, естественно, возникнут проблемы с нагрузками, но к тому времени уже пройдет год-два как Вы запустились, и Вы решите просто проапгрейдить железо и Вам этого хватит еще на полгода-год. А через 3 года, когда будет тяжко, Вы уже не пойдете к той мега-популярной Web-студии, так как много воды утечет. Да и за 3 года столько всего поменяется. Web на месте не стоит. А может появиться понимание того, что такое высокие нагрузки.<br />
<br />
Подумайте, кто работает в Web-студиях на должности программистов? Зачем студии держать толкового perl-программиста со знаниями c, или гуру unix систем, или профессионального js-разработчика? Ведь 90% задач сводиться к написанию визитки или интернет-магазина на базе какой-нибудь CMS, где важен дизайн и CEO-оптимизация.<br />
<br />
Какая репликация, какой шардинг, какой Memcached, какие нереляционные БД? Зачем?!? <br />
Тут все сводится к вопросу нужно ли использовать для визитки шаблонизатор.<br />
<br />
Нет. конечно есть Web-студии, которые реализую серьезные проекты, но как правило они ориентированы на иностранного заказчика (рынок слишком узкий), реализовав для них 2-3 действительно серьезных проекта, и продолжая из поддержку, но они не вешаются на первый попавшийся проект тем более от отечественных заказчиков.<br />
<br />
Кстати, я не представляю высоко-нагруженного проекта без поддержки. Нагрузки постоянно изменяются, постоянно выплывают "узкие места", которые нужно ликвидировать, причем их просто невозможно спрогнозировать. Количество серверов растет, взаимодействие между ними усложняется, проект постоянно в динамике.<br />
<br />
Представьте высоконагруженную систему без поддержки:<br />
<br />
Мне надо опимизировать БД, я иду в Web-студию и говорю, у меня проблема с БД. Стоп... Не так...<br />
<br />
Сайт начинает очень медленно работать. Вы идете в Web-студию и говорите сайт медленно работает, что делать? Они говорят:<br />
- N-килобаксов и мы в течении 3-5 дней ищем и устраняем проблемы. <br />
- Еб.. 3-5 дней! От меня пользователи разбегутся! Мне надо сейчас!<br />
- К сожалению мы не можем прям сейчас, разработчик(и), который писал(и) Ваш сайт ушли/умерли/в отпуске/в отгуле/верстаю срочно кому-то визитки.<br />
Вы с матюгами:<br />
- 2*N-килобаксов!<br />
- Секундочку! (деньги делают чудо). Сережа посмотри, что там с сайтом товарища.<br />
<br />
Какой-то непонятный Сережа мыкается 2 часа по сайту и выдает: "Проблема с БД. Надо оптимизировать! Как?!? Сервер БД уже давным-давно на отдельной мега-машине!?! Ну давайте попробуем Memcached. Но у Вас код не заточен, чтобы его использовать, поэтому нам надо 2 недели, чтобы все переписать (кто не знает, но на практике через 2 недели никогда ничего не бывает). И Вы понимаете, что дешевле было держать 2-3 Сереж-программистов у себя в офисе полгода, чем решить эту проблему с БД. А пользователи тем временем бегут с Вашего сайта, потому что он превратился в унылое медленно "Г".<br />
<br />
<br />
Маркетинг сила, часто на одном только словоблудии и красивых картинках можно получить проекты рассчитанные на высокие нагрузки, но будет ли это рабочим вариантом не так уже и важно. Почему? Для заказчика, потому что он ничего не понимает, для Web-студии, так как только 1 из 100 проектов действительно станут популярными в сети.<br />
<br />
В общем парадоксальная ситуация в разработке серьезных проектов "КАЧЕСТВО ПРОГРАММНОЙ ЧАСТИ" часто имеет меньшее значение, чем дизайн, ceo или promotion. Как Вам такой вывод? <br />
<br />
С ув. antonfin.</div><br />
</span>antonfinhttp://www.blogger.com/profile/17669732865782196806noreply@blogger.com6tag:blogger.com,1999:blog-4039491199668244013.post-9587414793407391972011-04-04T14:05:00.003+03:002011-04-05T18:56:49.840+03:00Вышел очередной perl podcast<div dir="ltr" style="text-align: left;" trbidi="on">1 апреля был анонсирован новый<span style="font-size: small;"> <a href="http://yapp.rpod.ru/230540.html">YAPP #2: Новости за прошедший месяц, источники информации на русском, новые cpan модули</a> за 01.03.2011 - 01.04.2011.</span><br />
<span class=fullpost><br />
<span style="font-size: small;">Начиная с пилотного выпуска слышу много критики в их адрес, мол темы не актуальны, общаются сковано и т.д.</span><br />
<br />
<span style="font-size: small;">Но от себя хочу сказать, следующее:</span><br />
<br />
<span style="font-size: small;">Во-первых, ребята делают большое дело в популяризации perl.</span><br />
<br />
<span style="font-size: small;">Во-вторых, для компаний, где штат </span><span style="font-size: small;">perl-программистов превышает 2-3 человека распространение новостей происходит быстро и люди вполне могут находиться в курсе последних событий </span><span style="font-size: small;">perl-</span><span style="font-size: small;">сообщества. </span><br />
<span style="font-size: small;">Но для </span><span style="font-size: small;">perl-программиста в маленькой компании или </span><span style="font-size: small;">perl-программистов фрилансеров, такие подкасты просто необходимы, чтобы иметь представления о том, что происходит с языком.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Так, например, я являюсь единственным разработчиком и мне очень трудно приходиться следить за последними новинками даже несмотря на то, что я подписан на рассылку с <a href="http://planetperl.ru/">planetperl.ru</a>, слежу за постами о perl в блогах (советую <a href="http://koorchik.blogspot.com/">koorchik.blogspot.com</a>), обязательно просматриваю видео с различных perl конференций.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">В общем слушайте </span><a href="http://yapp.rpod.ru/230540.html"><span style="font-size: small;">YAPP #2</span></a><span style="font-size: small;">. И делайте язык, который любите, популярным!</span><br />
<br />
<span style="font-size: small;">Кстати, в комментариях пишите, где Вы берете интересную информацию о perl.</span><br />
<br />
<span style="font-size: small;">С ув. antonfin.</span><br />
<h1 style="font-weight: normal;"></h1></div></span>antonfinhttp://www.blogger.com/profile/17669732865782196806noreply@blogger.com0tag:blogger.com,1999:blog-4039491199668244013.post-13816544385798272872011-04-02T21:02:00.010+03:002011-04-05T18:57:37.309+03:00PHP-разработчики - люди которых я боюсь<div dir="ltr" style="text-align: left;" trbidi="on">Сегодня на <a href="http://habrahabr.ru/blogs/php/116686/">Хабре</a> наткнулся на неплохую задачу для своих мозгов.<br />
<span class="fullpost"><br />
Нужно было реализовать функцию <b>read_conf</b> принимающую имя файла с содержимым:<br />
<br />
<span style="font-size: x-small;"><i>id=www<br />
session.timeout=120<br />
session.server.0.host=127.0.0.1<br />
session.server.0.port=1111<br />
session.server.0.id=session1<br />
session.server.1.host=127.0.0.1<br />
session.server.1.port=1111<br />
session.server.1.id=session2<br />
image.width=640<br />
image.height=480<br />
image.watermark.small=wsmall.png<br />
image.watermark.normal=wnormal.png</i></span><br />
<br />
Которая приводит конфиг к такой переменной:<br />
<br />
<span style="font-size: x-small;"><i>array(3) {<br />
["id"]=>strong(3) "www"<br />
["session"]=>array(2) {<br />
["timeout"]=>string(3) "120"<br />
["server"]=>array(2) {<br />
[0]=><br />
array(3) {<br />
["host"]=><br />
string(9) "127.0.0.1"<br />
["post"]=><br />
string(4) "1111"<br />
["id"]=><br />
string(8) "session1"<br />
}<br />
[1]=><br />
array(3) {<br />
["host"]=><br />
string(9) "127.0.0.1"<br />
["port"]=><br />
string(4) "1111"<br />
["id"]=><br />
string(8) "session2"<br />
}<br />
}<br />
}<br />
["image"]=><br />
array(3) {<br />
["width"]=><br />
string(3) "640"<br />
["height"]=><br />
string(3) "480"<br />
["watermark"]=><br />
array(2) {<br />
["small"]=><br />
string(10) "wsmall.png"<br />
["normal"]=><br />
string(11) "wnormal.png"<br />
}<br />
}<br />
}</i></span><br />
<br />
<br />
На задачу выделялось 10 минут. <br />
<br />
Задача не очень сложная, если не ограничиваться временем, честно признаться мне немного не хватило 10 минут, <br />
но я и не претендую на звания "Гуру php", да и не это важно.<br />
<br />
Я как человек любопытный стал просматривать комментарии, чтобы найти наиболее интересные решения данной задачи.<br />
<br />
По мнению большинства читателей топика наилучшее решение (наибольшее число позитивных отзывов за комментарий)<br />
было следующее решение:<br />
<br />
<pre class="prettyprint lang-php"><?php
$r = read_conf( "config.txt" );
print var_dump( $r );
function read_conf($filename) {
foreach (parse_ini_file($filename) as $key=>$value) {
$key = vsprintf('$result["%s"] = "%s";', array(
str_replace('.', '"]["', $key),
$value,
));
eval($key);
}
return $result;
}
?>
</pre><br />
<br />
Гениально! Наименьшее число строк! Никакой рекурсии! Умница! <br />
<br />
Вы тоже так подумали? Нет? И ПРАВИЛЬНО!<br />
<br />
Ведь дырка! Ну как никто из них об этом не подумал? Теперь в конфиг можно вставить, какой угодно код, который будет выполнен запускаемым скриптом!<br />
<br />
Не верите? Попробуйте вот такой конфиг (будет работать в Unix-подобной ОС, но для пользователей Windows можно написать свой пример).<br />
<br />
<i><span style="font-size: x-small;">id=www<br />
session.timeout=120<br />
session.server.0.host=127.0.0.1<br />
session.server.0.port=1111<br />
session.server.0.id=session1<br />
session.server.1.host=127.0.0.1<br />
session.server.1.port=1111<br />
session.server.1.id=session2<br />
image.width=640"\";shell_exec('ls -l > hack');\""<br />
image.height=480<br />
image.watermark.small=wsmall.png<br />
image.watermark.normal=wnormal.png</span><br />
</i><br />
<br />
Я его немного изменил, добавил вот такой кусочек <b>"\";shell_exec('ls -l > hack');\""</b>. И теперь имею снимок поточной директории.<br />
Но мы можем с легкостью изменить конфиг добавив вместо '<b>ls -l > hack</b>', например '<b>rm -Rf /</b>'. В общем еще очень много гадости можно придумать.<br />
<br />
Но самое главное об этом НИКТО не подумал. Такой серьезный информационный портал. Множество действительно профессиональных php-программистов. И НИКТО не сделал по этому поводу замечания. А теперь представьте, масштаб трагедии...<br />
<br />
Как таким людям можно доверить серьезный проект? В общем я бы побоялся.<br />
<br />
А Вы?<br />
<br />
С ув. antonfin<br />
<br />
P.S. Нет, все таки нашелся <a href="http://habrahabr.ru/blogs/php/116686/#comment_3786890">человек</a>, который сделал замечания по данному вопросу. Но его комментарий не был поддержан, я бы даже сказал, что он был обвинен в ханжестве.<br />
<br />
</span></div>antonfinhttp://www.blogger.com/profile/17669732865782196806noreply@blogger.com3tag:blogger.com,1999:blog-4039491199668244013.post-13845725095084360462011-02-08T13:32:00.009+02:002011-04-05T18:58:16.081+03:00Конфиг vim истинного perl программера<div dir="ltr" style="text-align: left;" trbidi="on"><style type="text/css">
p { margin-bottom: 0.21cm; }a:link { color: rgb(0, 0, 128); text-decoration: underline; }
</style><br />
<div style="margin-bottom: 0cm;">На данный пост меня воодушевил комментарий одного "Анонимуса" на perl-блоге моего хорошего друга (блог - <a href="http://koorchik.blogspot.com/2011/01/perl-ide-eclipse-epic.html?showComment=1296488615940#c6922326287541042993">koorchik.blogspot.com</a>). </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Пост первый, так что прошу не судить строго. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Скажу сразу, что vim я использую как полноценную IDE и полноценный текстовый редактор. Кстати данный пост пишу так же в vim... </div><div style="margin-bottom: 0cm;"><br />
</div><span class="fullpost"><br />
<div style="margin-bottom: 0cm;">Почему vim, это отдельная история, поэтому напишу её когда-нибудь отдельно. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Итак основные моменты, которые необходимы для работы с perl в vim. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Разделю все на 2 основные части - это плагины, которые я бы советовал для работы с perl и настройка специального режима для perl в vim. </div><div style="margin-bottom: 0cm;"><span style="font-size: large;"><br />
</span></div><div style="margin-bottom: 0cm;"><span style="font-size: large;">Плагины </span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">1. Плагин perl-support автор - Fritz Mehner, качаем тут <a href="http://www.vim.org/scripts/script.php?script_id=556%20">vim.org</a></div><div style="margin-bottom: 0cm;">Данный плагин имеет огромное количество различный плюшек для perl-программиста, разного рода хот-кеи, проверка синтаксиса, шаблоны и т.д. </div><div style="margin-bottom: 0cm;">Первое, что я советую после того как Вы скачали, распаковали и скопировали все содержимое в vim-директорию, так это отредактировать под себя шаблоны. </div><div style="margin-bottom: 0cm;">Открываем: </div><div style="font-family: "Courier New",Courier,monospace; margin-bottom: 0cm;"><br />
</div><div style="font-family: "Courier New",Courier,monospace; margin-bottom: 0cm;"><span style="font-size: small;">vim ~/.vim/perl-support/templates/Template </span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Редактируем</div><div style="font-family: "Courier New",Courier,monospace; margin-bottom: 0cm;"><br />
</div><div style="font-family: "Courier New",Courier,monospace; margin-bottom: 0cm;">|AUTHOR| = Ваше имя и фамилия </div><div style="font-family: "Courier New",Courier,monospace; margin-bottom: 0cm;">|AUTHORREF| = (у меня тут пусто) </div><div style="font-family: "Courier New",Courier,monospace; margin-bottom: 0cm;">|EMAIL| = Е-mail </div><div style="font-family: "Courier New",Courier,monospace; margin-bottom: 0cm;">|COPYRIGHT| = Copyright (c) |YEAR| (|EMAIL|) </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">После редактируем под себя темплейты для perl скриптов, тестов и модулей</div><div style="margin-bottom: 0cm;"></div><div style="font-family: "Courier New",Courier,monospace; margin-bottom: 0cm;"><span style="font-size: small;">vim ~/.vim/perl-support/templates/file-description.template </span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Дальше: </div><div style="font-family: "Courier New",Courier,monospace; margin-bottom: 0cm;">:help perl-support </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">И на сколько хватит... </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">От себя добавлю 3 любимые команды:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: "Courier New",Courier,monospace;">\h</span> на выбранной функции - открывает perldoc прямо в vim </div><div style="margin-bottom: 0cm;"><span style="font-family: "Courier New",Courier,monospace;">\rs</span> - проверяет на синтаксические ошибки (аналог <span style="font-family: "Courier New",Courier,monospace;">perl -c</span>) </div><div style="margin-bottom: 0cm;"><span style="font-family: "Courier New",Courier,monospace;">\rr<span style="font-family: inherit;"> </span></span>- запускает редактируемый скрипт. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">2. Плагин vim-perl, автор - Andy Lester, качаем с <a href="https://github.com/petdance/vim-perl">github.com</a> </div><div style="margin-bottom: 0cm;">Если честно я ждал этого плагина два года. И наконец нашел где-то месяцев 6 назад. </div><div style="margin-bottom: 0cm;">Самый главный плюс данного плагина, это адекватная подсветка синтаксиса для perl6 и xs! </div><div style="margin-bottom: 0cm;">Возможно там и отличная подсветка для pod файлов, но у меня все комменты подсвечиваются исключительно одним цветом, поэтому оценить не могу. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">3. Авто-проверка синтаксиса, автор - Martin Grenfell скачать можно с <a href="https://github.com/scrooloose/syntastic.git">github.com</a> </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Автоматически подсвечивает ошибки, если таковые имеются, в том числе и в perl скриптах. </div><div style="margin-bottom: 0cm;">На русском почитать о данном плагине можно на <a href="http://habrahabr.ru/blogs/vim/108564/">Хабре</a> </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">4. Для пользователей фреймворка Mojolicious советую плагин mojo.vim, автор - Yaroslav Korshak, качаем как всегда с <a href="https://github.com/yko/mojo.vim.git%20">github.com</a></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Необходимая вещь при работе с "ep" темплейтами. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-size: large;">Настройка спец. режима для perl </span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">В <span style="font-family: "Courier New",Courier,monospace;">~/.vimrc</span> пишем такой код </div><div style="margin-bottom: 0cm;"><br />
</div><div style="font-family: "Courier New",Courier,monospace; margin-bottom: 0cm;"><span style="font-size: x-small;">augroup FileSettings </span></div><div style="font-family: "Courier New",Courier,monospace; margin-bottom: 0cm;"><span style="font-size: x-small;">autocmd! </span></div><div style="font-family: "Courier New",Courier,monospace; margin-bottom: 0cm;"><span style="font-size: x-small;">" setting up for Perl </span></div><div style="font-family: "Courier New",Courier,monospace; margin-bottom: 0cm;"><span style="font-size: x-small;">autocmd FileType perl call LangPerl() </span></div><div style="font-family: "Courier New",Courier,monospace; margin-bottom: 0cm;"><span style="font-size: x-small;">augroup END </span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Он будет запускаться при открытии нового файла, и если это перловый файл, то будет запускаться функция <span style="font-family: "Courier New",Courier,monospace;">LangPerl()</span>, которая и будет устанавливать определенные параметры для более эффективной работы </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Ниже моя функция для работы с перл </div><div style="font-family: inherit; margin-bottom: 0cm;"><br />
<pre class="prettyprint lang-vim" style="overflow-x:auto;">function LangPerl()
" включаем все самое умное что есть в perl :)
setlocal expandtab autoindent smartindent
" Генерим сtags файл по нажатию F6
imap <f6> :!find . -type f -name "*.p[ml]" -print0 \| xargs -0 ctags --fields=+iaS --extra=+q .<cr>a
nmap <f6> :!find . -type f -name "*.p[ml]" -print0 \| xargs -0 ctags --fields=+iaS --extra=+q .<cr>
" устанавливаем ограничение на длину строки в 100 символов
setlocal textwidth=100
endfunction
</pre><br />
</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Что такое теги опытный пользователь vim знает не по наслышке (а кто не знает, тот скорее всего никогда серьезно не использовал vim, но для желающих познавать <span style="font-family: "Courier New",Courier,monospace;">:help tag</span> и <span style="font-family: "Courier New",Courier,monospace;">:help ctags</span>). </div><div style="margin-bottom: 0cm;">Я добавил рекурсивное прохождение по всей поточной папке выбирая для индексации исключительно perl-файлы. И теперь по <span style="font-family: "Courier New",Courier,monospace;">CTRL-]</span> и <span style="font-family: "Courier New",Courier,monospace;">CTRL-T</span> мы будем перемещаться по всему проекту. </div><div style="margin-bottom: 0cm;">Про ctags написано множество всего, например:</div><div style="margin-bottom: 0cm;"><a href="http://vkhandus.blogspot.com/2008/02/ctags-vim.html">http://vkhandus.blogspot.com/2008/02/ctags-vim.html</a></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Как Вы, наверное, догадались написать такую же функцию для javascript или С++ файлов не составит труда. Поэтому дерзайте, пробуйте и будет Вам счастье. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Вроде бы все. Как-нибудь напишу еще один пост, как сделать из vim полноценную IDE, после которого обещаю и выложить ссылку на весь конфиг с плагинами.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Всем спасибо, кто читал и комментировал. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">С ув. antonfin </div><div style="margin-bottom: 0cm;"><br />
</div></span></div>antonfinhttp://www.blogger.com/profile/17669732865782196806noreply@blogger.com2