Oct 18

Не могу не поделиться двумя очень интересными постами:

С общего позволения поделюсь своими размышлениями о дальнейшей судьбе гривны. Дум много, поэтому букв будет тоже много :). Так что наберитесь терпения… Для этого в двух словах о ЗВР, зачем он нужен, его основные функции, и каким образом он влияет на курс национальной валюты. Как я уже говорил, динамика ЗВР в своей качественной доходной части зависит от соотношения экспорт/импорт. Да, существуют еще такие механизмы как внешнее инвестирование и валютные депозиты как от частных лиц, так и от коммерческих организаций, но, последние по качеству принадлежат к долговому капиталу (т.е. его нужно отдать, да еще и с процентом), и этот долговой капитал так же находится в “теле” ЗВР, так же существуют доходы по ценным бумагам, но об этом чуть позже.

  1. ЗВР - как ресурс для стабилизации национальной валюты. Целевым наполнением этой части является валютная выручка экспортеров. и НДС импортеров. Для простоты понимания представим что страна экспортирует только сельхозпродукцию и импортирует ГСМ и механизацию (так проще будет понять и мне проще объяснить :) ), т.е. динамика наполнения/расходования ЗВР имеют сезонный характер. Поэтому график будет иметь синусоидальный вид, с июня по ноябрь - поступления (от экспорта), с ноября по июнь - расходы (на импортное ГСМ и механизацию). Получается, что в момент поступлений спрос на валюту будет низкий, и соответственно при расходах высокий. Что должно происходить: НБУ, в момент поступлений, накапливает определенное количество валюты для того, чтобы обеспечить спрос во время регресса экспорта без привлечения внешних государственных займов (увеличение государственного долга, который в дальнейшем не только нужно отдать, но и содержать, т.е. платить проценты). Так же НБУ устанавливает коридор для национальной валюты, т.е. берет на себя обязанность производить интервенции для удовлетворения спроса на валюту в определенных периодах времени и в определенных пределах. Поэтому, чем “размашистее” динамика экспорт/импорт, тем больше нужен объем ЗВР, для стабилизации курса нац. валюты. Далее, всем известно, что валюта тоже деньги, и на сегодняшний день в мире нет без инфляционной валюты. Для того. что бы лежащая в ЗВР валюта не обесценивалась инфляцией до момента необходимости интервенции, НБУ покупает разного рода ценные бумаги с доходностью выше чем инфляция, в основном речь идет об гос. облигациях других стран. Более того, в законодательстве НБУ прописаны, какие бумаги можно для этих целей покупать. Тут уже говорили о рейтингах ценных бумаг. (ААА, или ССС), тут добавлю еще момент, чем выше рейтинг ценной бумаги, тем ниже ее доходность. Т.е. если допустим Украина с США обменяются гос. облигациями на 1 млрд. (а так как США законодательно не имеет право держать в своем ЗВР бумаги с рейтингом ССС и это будет осуществлять через третье лицо, например, МВФ, которая накрутит и свой процент) то Украина будет платить гораздо больший (на порядок) процент. Так же для сбережения валюты в ЗВР НБУ может скупать высоколиквидные акции частных коммерческих структур (корпорации, ассоциации, холдинги, банки, фонды и т.д.). У всех этих бумаг, есть сроки по обязательствам возврата денег, и сроки уплаты % (обычно через механизм купонов) эмитентом инвестору. Сроки у “продвинутых” ценных бумаг (например, спектр гос. облигации США) по возврату денег эмитентом могут быть разными, от 25 лет до 1-го часа, и это позволяет НБУ достаточно тонко защищать ЗВР от внешней (импортной) инфляции. Подобная покупка есть не что иное как прямая (100%) инвестиция экономики эмитента этой ценной бумаги (т.е. если Украина покупает гос. облигации США, она инвестирует экономику США, при этом гос. долг США увеличивается), вопрос о том, кто решает какие бумаги скупать и какой при этом “откат” принимающему подобные решения - домысливайте сами :). Исходя из вышеизложенного становиться очевидным, что значительная часть валюты в ЗВР находиться в этих самых ценных бумагах, т.е. своего рода депозит в чужую экономику под весьма низкий процент, что ОЧЕНЬ выгодно этому самому эмитенту этих ценных бумаг, который естественно вложит эти деньги в свое производство, тем самым давая возможность последнему вытеснять с мирового рынка однотипные товары, ну или в военную промышленость, с продукцией которой он эти рынки физически расчистит для своих же товаров взамен дешевого сырья. А также часть ЗВР имеется непосредственно в валюте для обеспечения текущих интервенций для стабилизации национальной валюты. Для чего это нужно понимать? для того, что было понятно, как развитая экономика может стабильно существовать при гос. долге размером в 100% и даже больше от ВВП, всему причина маленький процент обслуживания этого долга, зачастую ниже или равный проценту роста экономики. Кстати в этом и заключается мировой кризис с 2008, когда рост экономики ниже обслуживания гос. долга (что приводит к его логарифмическому росту), а поскольку речь идет всего лишь о доходности в 2% годовых, то падение мировой экономики даже на 0,1% это весьма существенно. Понижать доходность подобных бумаг рыночными инструментами не получается, т.к. доходность слишком мала и при ее уменьшении эти бумаги массово поплывут на фондовый рынок, обваливая их цену и экономику страны эмитента. Украина например, с ее сегодняшним официальным падением ВВП в 9% (фактический думаю гораздо больше) и рейтингу в ССС вряд ли сможет стабильно существовать при соотношении гос. долга и ВВП больше чем 50%, при этом практически ВЕСЬ свой доход будет отдавать на содержание гос. долга. про 60% и выше - финишная прямая или к дефолту, или к всеобщему обнищанию населения вплоть до печально известного 33-го года (который еще далеко не социальное дно), и судя по тому, что сейчас у власти люди из банковской сферы, которым крайне не выгоден дефолт, то второй вариант для них предпочтительнее. Так же нужно понимать, зачем стране стабильный курс национальной валюты. Дело в том, что это жизненно необходимо для масштабных проектов, у которых срок реализации и окупаемости исчисляется в годах, и как составляющая этих проектов - долгосрочные контракты, в т.ч. весь спектр фьючерсов, которые есть по сути разновидностью этих контрактов. При стабильной национальной валюте есть возможность достаточно точно рассчитывать расходы и прибыли на достаточно большой период времени, и закладывать в сметы и цены минимальные риски. В противном случае поставщики и подрядчики будут закладывать в цены и сметы высокие риски, в следствии чего стоимость подобных проектов будет расти прямо-пропорционально нестабильности (в общем при непрогнозируемой прыгающей национальной валюте стране надо забыть о дешевых дорогах, мостах, коммуникациях, долгосрочных инвестициях и кредитовании и пр.). Более того, нестабильная национальная валюта провоцирует спекулятивную составляющую, которая еще больше «расшатывает» спрос/предложение на валюту (которую НБУ сегодня пытается остановить административно, ну т.е. в “демократическом” приказном порядке). Теперь складываем это все воедино, и анализируем: Когда политик (будучи всего лишь подставным и законодательно освобожденным от ответственности массмедийным лицом) по телевизору радостно оповещает граждан своей страны, что теперь курс национальной валюты будет определяться рынком (т.е. отпустить гривну в свободное плавание), это говорит о том, что НБУ в одностороннем порядке снимает с себя ответственность перед населением и нац. промышленностью за накопление и расходование ЗВР на стабилизацию гривны и экономики в целом, чем провоцирует развитие черного рынка и рост цен, в которые закладывается повышенные риски, а при дефиците валюты еще и повышая цены на импорт (отпустить в свободное плавание национальную валюту можно, если экономика работает как часы, но это точно не про Украину). Оплачивают эту «радостную» новость всецело население страны своей личной покупательской способностью, которые, глядя в окно, этому весьма рады… (страна мазохистов какая-то…). Делается это только для того, чтобы уйти от ответственности перед электоратом (мол мы не виноваты в том, что вы, “уважаемые” бараны граждане, “як скаженні” торгуете долларом между собой по 14 грн и выше. поэтому и не нойте - сами виноваты). А также, учитывая то, что ЗВР физически не хватает для функции стабилизации на фоне падения экономики и “войны”, эту часть ЗВР, которая отведена на стабилизацию нац. валюты, можно будет совершенно законно использовать для других целей. Для каких целей “освобождают” эту часть ЗВР? хороший вопрос, к которому мы вернемся :)
  2. ЗВР - как ресурс для дотаций. Эта часть ЗВР используется для поддержки внутреннего рынка и национального производителя как в виде прямых дотаций, так и кредитованию промышленности. Целевым наполнением этой части являются в основном таможенные пошлины на импорт и частично на экспорт (по ряду кодов ТНВЭД). Напомню по основной функции такого налога, как таможенная пошлина. Этот налог призван защищать национального производителя. Как? Например, Вы покупаете импортный легковой автомобиль, который стране в будущем никакой прибыли не принесет, варианты “купил для бизнеса” слишком малочисленны и в большинстве случаев прозаичны, чтобы принимать в расчет. В связи с этим на этот вид товара существует таможенная пошлина, а в ряде случаев и акцизный сбор, которые по логике должны быть направлены на развитие конкурирующего товара отечественного производителя, в виде дотации, ну т.е. в этом случае прямая инвестиция в ЗАЗ :), да-да, глядя на то, сколько импортного “экономически бесполезного” транспорта на украинских дорогах, ЗАЗ должен уже давным-давно быть ведущим мировым автопроизводителем :) почему этого не происходит? Думаем сами… Далее, социальные дотации, например, снижение цены населению за энергоносители такие как газ, уголь или электроэнергия. Как это работает: Государство покупает газ по рыночной цене, и для того, чтобы увеличить покупательскую способность населения (т.е. благосостояние) частично возмещает расходы на его потребление, т.е. рядовое население страны платит за газ цену ниже рыночной, и весь этот праздник за счет таможенных пошлин при транзите газа России в страны ЕС. Главным условием подобной дотации – ГТС должна принадлежать государству, и размер государственной части в ГТС и будет определять размер дотации за вычетом расходов на обслуживание… Все мы слышали о дотационном Донецке? Так вот это правда, угольную промышленность действительно серьезно датировали, т.к. добыча угля в Донбассе по себестоимости достаточно высокая, уголь находиться на большой глубине, что в свою очередь еще и опасно в плане дополнительной оплаты человеческого труда и страхования, что делает национальный уголь значительно дороже угля, добываемого в открытых карьерах в той же России. И для того, чтобы не импортировать за валюту уголь не делая при этом дополнительный спрос на последнюю, Государство датировала угольную промышленность из ЗВР, а в замен получало более стабильную национальную валюту, рабочие места, и компенсировало эти дотации населению дешевой электроэнергией, ряда химической промышленности и металлом, в производстве которых украинский уголь участвовал, чем еще увеличивало поступления в ЗВР от конкурентоспособного экспорта этого угля или продукции при которой он использовался. Как этот механизм работал в реальности? Можно оценить, сравнивая стоимость электроэнергии, товаров химической промышленности и металла у нас и за границей. К чему столько букв? :) И какое это имеет отношение к курсу гривны? Все просто, включаем телевизор, слушаем: Одним из условий предоставления вожделенных и «спасительных» кредитов МВФ является повышение тарифов на коммунальные услуги (в т.ч цены на газ и электроэнергию). Т.е. эта часть ЗВР так же абсолютно законно освобождается от своего целевого предназначения. ГТС уже совсем не обязательно быть государственной, ну т.е. ее стоимость можно использовать в качестве гарантии под что-нибудь или вообще продать под соусом «слишком дорогое обслуживание», угольные шахты Донецка пусть конкурируют на мировом рынке, ну т.е. закрываются, да и цена импортного угля становиться экономически оправданной на радость заграничным поставщикам. В перспективе - спрос на валюту повышается, безработица растет, наполнения ЗВР понижаются из-за неконкурентоспособных товаров, зависящих от угля. И при этом естественно отныне население обязано платить за указанные энергоносители по рыночной цене, понижая этим свою же покупательскую способность. При этом пол страны от этого в восторге! Уголь уже подорожал в 2 раза, и судя по всему это не предел. Мысль про народный мазохизм в приступе маниакального патриотизма перестает быть шуткой…
  3. ЗВР – как хранилище корпоративных валютных обязательств. Это разного рода аккредитивы и гарантийные платежи коммерческих сделок в банковской среде. Которые вносятся иностранными или отечественными заказчиками и покупателями и находятся там полностью или частично до момента окончания сделок, сроки могут быть разными, от нескольких дней до года. Зная условия контрактов и сроки их выполнения НБУ может эти деньги дать частным банкам в долг или перевести в краткосрочные ценные бумаги, получая при этом определенный доход. Но эта часть ЗВР по существу не является собственностью государства.
  4. ЗВР – как гарантийный капитал частных банков. Другими словами, банки, для того что бы вести свою деятельность обязаны вносить определенную часть своего денежного валютного капитала в НБУ (т.е. в ЗВР) в качестве гарантий выполнения своих обязательств перед населением. Чем больше валютная капитализация банков, тем больше эта часть. Хотя эту часть регламентирует НБУ и может как повышать ее, так и понижать.
  5. ЗВР – как гарантийный капитал при внешних государственных заимствованиях. Грубо говоря, если государству не хватает для чего-либо своего ЗВР, оно прибегает к внешним кредитам. Как правило при таком кредитовании четко оговаривается сумма в ЗВР, которую государство обязано хранить до выполнения своих долговых обязательств, так же оговаривается в каком виде государство должно хранить эту сумму, обычно это ценные бумаги указанные кредитором, или специально созданным для этого кредита ценным бумагам, которые как правило имеют меньшую доходность. Получается такая штука, кто-то дает государству кредит, а в замен требует часть ЗВР инвестировать под крошечный процент куда скажут. Более того, при невыполнении государством своих долговых обязательств в объеме гарантийного капитала эти ценные бумаги автоматически аннулируются и… никто никому ничего не должен, если долговые обязательства не выполняются и превышают гарантийный капитал – дефолт.

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

  1. Обеспечивать спрос/предложение валюты на рынке с помощью ЗВР нынешнее правительство практически отказывается. Те «наливки» в купе с «200 на нос и не цента больше» больше смахивает на предвыборную компанию. Т.е. у кого кеды зашнурованы сможет поднять тыщенку другую, чему будет рад. В то время как весь импорт уже давно считают по курсу близкое к 15, и платить за это будет все то же население, а поскольку населению это нравиться – значит так тому и быть и в дальнейшем, и пока такого населения в стране больше 5%, они будут и дальше с помощью СМИ создавать тренд большинства.
  2. Серьезно датировать нынешнее правительство так же ничего не собирается, повышение цен на энергоносители и коммуналку можно описать уже крылатой фразой: «Це є ціна за нашу незалежність» ну если не считать предвыборной акции автора этого высказывания в виде скидок на твёрдотопливные и электрические котлы :)
  3. Обеспечивать корпоративные взаиморасчеты нынешнее правительство так же не спешит, доказательством этого есть незакрытые валютные задолженности импортеров перед поставщиками.
  4. Думаю НБУ будет снижать ставки гарантийного банковского капитала, так как гарантировать себе же – абсурд. При этом включается правило, лопнувший банк никому, ничего не должен. А вот освободившимся ЗВР можно попользоваться.
  5. Гарантийный капитал для внешних заимствований… а вот эта часть ЗВР растет как на дрожжах. Желание нынешнего правительства набрать кредитов, да побольше, уже параноидальная. Закладывается все что можно, и даже гос. предприятия в Крыму :). И сегодня практически весь ЗВР предназначен для внешнего кредитования. Вот что бы вы понимали, как это выглядит на бытовом уровне, представьте, что вы приходите в свой дом после работы, а дверь выломана, в доме куча народу и полным ходом идет аукцион вашего имущества, и когда вы задаете вопрос «Что вы тут делаете?» вас коллективно спускают с лестницы с криками «Геть!» и «Зраднык!»… Это второе грандиозное воровство, которое я видел в своей жизни, которое шокирует и полностью деморализует своими масштабами. Первое было при развале СССР.

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

Четкие прогнозы строить в ситуации, когда завтра Украина может прекратить свое существование как государство тоже сложно. Ну вот смотрите:

  1. Чем закончиться дележка востока Украины? Вариантов много: или это будет очередное Преднестровье - это один расклад, или это будет полностью разрушенная часть Украины - другой рассклад, или это будет часть России - третий расклад.
  2. Что сделает Путин, когда Украина не рассчитается по долгам перед Россией? Опять вариантов много, и опять все стоят на уровне быть Украине, или не быть.
  3. Что сделает ЕС, когда Украина начнет воровать ими оплаченный газ?
  4. Что будет делать народ, когда власти объявят, что все, фенита ля коммедия. Денег нет, экономики нет, запасов нет, и во всем виноват Путин? Я не исключаю что эта шайка в пьяном угаре войну России объявит.
  5. Что будут делать мировые лидеры с Россией? еще санкции? или какую-нибудь провокацию в духе “сепаратисты по неопытности подорвались на атомной бомбе”?
  6. Чем закончиться демпинг цены на нефть?

Украина сегодня просто территория для решения многих не украинских проблем, по большому счету проблем в Украине было не так уж и много, и их решать можно было плавными реформами, и кому нужна была эта свистопляска с майданом можно только догадываться, но чувствую я что необходимый результат еще не достигнут, и по большому счету от Украины, и тем более от ее сегодняшних правителей мало что зависит, страна по уши в долгах, власть по колено в крови, которая истерично держиться за власть понимая, что если не удержаться, последователь первым делом начнет с “разбора полетов” и начнет отжимать в качестве компенсации их личный бизнесс, и сегодня говорить об Украине как о полноценном государстве, где отрофированы практически все государственные структуры, начиная от СБУ заканчивая НБУ не совсем корректно. Радует одно, что люди начали интересоваться действиями правительства, и в дальнейшем повысит качество избирательности, а плохо то, что может быть намного хуже.

Многие тут верят в игру на понижение, но никто не думает о том, что в бюджете страны дыра (внутренние задолженности не считая того, чего они наобещали “добровольцам”, и не считая того, сколько они сливают на войну), и если правительство пойдет на понижение, оно тем самым эту дыру еще больше увеличит. НБУ пойдет на понижение в 2 случаях: импорт к нулю и жизнь в стране = 19ом веку, и то не факт, в таких условиях население быстро деградирует и “стараться” будет не для кого, или нужно перебить всех социальщиков, а именно пенсионеров с инвалидами, а также перебить всех “добровольцев” в котлах, думаю они надеяться что на переферии страны этой зимой большинство из них тихо и мирно умрет от холода и голода. В других случаях играть на понижения с внутренними долгами в надежде, что в банковскую систему будет возращатся деньги, это вопрос нескольких месяцев, а то и года, а может и больше. Народ стреляный уже, осторожный. Даже если завтра НБУ нарисует курс 10,00 я в банк деньги не понесу, хотя зашел по 12,5. Я лучше затарюсь сырьем на пару лет вперед, а на остатки слетаю куда-нибудь в теплые края, где тихо и спокойно, чем буду в наперстки с НБУ играть :)

written by fxposter

Oct 30

Announcement / NEWS / CHANGELOG.

A nice human-readable :) list of changes since 1.9.2 based on 1.9.3-preview1 is here.

I’ve already switched to 1.9.3 a couple of weeks ago in my development environment, now it’s time to make a switch in production ones.

written by fxposter

Oct 30
brew install readline
brew link readline
CFLAGS='-I/usr/local/include' LDFLAGS='-L/usr/local/lib' rvm install ree

written by fxposter

Sep 07

Очень давно не писал. Очень много разных интересных тем, но как-то до полноценных постов дело так и не доходит.

Но сегодня речь не о программировании… а о людях, которые работают достаточно близко к области программирования - нанимают людей в девелоперские конторы. Далее выкладка из моего скайпа:

Капец
11:00
HR из Харькова
11:00
Сначала она мне написала че-то
11:00
давно уже
11:00
поговорили немного с ней и она замолчала
11:01
потом через несколько дней пишет - могу ли я подойти к ним в офис, побеседоваться
11:01
я отвечаю, что я вообще-то не из Харькова
11:01
хотя в первый раз она предлагала удаленную работу
11:02
она такая “а, ну ок, удаленно тоже можно”
11:02
пишет сегодня
11:02

Здравствуйте ,  Кирилл
10:42
Вы могли  бы  прислать кусок своего кода  работы на  руби ?
10:42
Это только для  того , чтобы  показать клиенту  Ваш уровень

11:10
Продолжение:

вообще-то я не Кирилл
11:07
Павел
11:07
извините
11:09
а из какого Вы города?

Мне вот интересно - кого такие люди реально могут захедхантить? :)

written by fxposter

Aug 27

Капец! :)))

written by fxposter \\ tags:

Aug 23

Потихоньку подходит к концу конкурс 10K Apart. Заходишь, смотришь и думаешь - “дааа, чего только люди не впихнут в 10 килобайт JavaScript-а”. :)

Из наиболее понравившегося:

  • Fontanero - увлекательная игрушка на тему “жизнь водопроводчика”. На Хабре про неё уже писали создатели.
  • Poker Heads Up - долго играл, доиграл до конца, выиграл, понравилось. Из названия понятно, о чем игрушка. :)
  • Racer 10k - вызвавшие ностальгию по моему первому компьютеру (а это был в далеком 1995-м году первый пентиум 133МГц) гоночки. Не очень затягивает, но не написать не мог. PS. Игра работает в Chrome намного быстрее, чем в FF, что положительным образом сказывается на результатах.

written by fxposter \\ tags: ,

Aug 22

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

Комментарии по поводу улучшения как дизайна так и функционала категорически приветствуются. :)

Технические подробности: сайт использует Rails 3 RC, jQuery, MongoDB (в качестве ORM используется Mongoid), а для ресайза изображений используется CarrierWave (так как больше ничего поддерживающего Mongoid я не нашел) + RMagick + ImageMagick.

Кстати говоря, для того, чтобы запустить этот сайт мне пришлось обновить операционку на моем Linode-овском VPS, т.к. RMagick требовал более новую версию ImageMagick-а, чем та, которая была в репозиториях Ubuntu 9.04. Кстати, в Linode Library есть очень хороший гайд по обновлению.

written by fxposter \\ tags: , , ,

Jul 13

Вот такую картину я увидел сегодня у себя в админке на Linode. Что-то в ней мне показалось странным. Через пару секунд я понял, что именно - надпись “Linode 512″, хотя я точно помнил, что у меня до этого было 360 мегабайт оперативки. Законнектился на сервак, проверил - действительно 360 мегабайт доступно. Зашел на страницу тарифных планов - действительно 360 поменялось на 512, да и остальные планы явно получили побольше оперативки. Как оказалось - увеличение оперативки произошло еще месяц назад, а я его не заметил, т.к. ни разу не перезагружал сервак с того момента, как он прекратил зависать, а для того, чтобы получить заветный прирост ресурсов - нужна перезагрузка.

written by fxposter \\ tags: ,

Jul 11

Некоторые свои посты я дополняю постами-линками на Хабрахабре. Последний подобный пост - “Особенности работы jQuery.live()“. Он так и не попал на главную, но в данном случае это не очень важно, т.к. свой “хабраэффект” я поймал.

До этого у меня случались странности на сервере - он начинал есть все 400% процессора и наглухо зависал - к нему было невозможно подключиться и единственным вариантом восстановления был шатдаун инстанса в админке Linode. Это случалось нечасто и не особо меня парило. Но когда на мой сайт стали постоянно заходить люди с хабра - такое поведение сервера стало постоянным. Он начинал есть весь процессор. После перезагрузки он пару минут держался, а потом опять начинал свой бравое дело. Стало ясно - что-то явно не так в настройках.

После довольно недолгих разбирательств стало ясно, что виноват Apache (у меня стоит Apache + mod_prefork + php + ruby via passenger). Параметры prefork-а:

<IfModule mpm_prefork_module>
StartServers          5
MinSpareServers       5
MaxSpareServers      10
MaxClients          150
MaxRequestsPerChild   0
</IfModule>

Теперь мне стало очевидно всё, кроме одной вещи - почему же все-таки был загружен процессор… А причина зависаний сервера была проста - параметр MaxClients отвечает за то, сколько процессов апач может запустить для обработки пользователей (в prefork-е каждый запрос обрабатывается отдельным процессом, который либо запускается, либо вытаскивается из пула свободных запущенных процессов). Процессы апача ну очень недешевые в плане ресурсов - честно говоря, я до сих пор не знаю, как можно посмотреть, сколько реально кушает процесс апача - по текущей нагрузке на сервак при создании новых процессов апач кушает лишние 10-20мб памяти. 150 процессов * 10 мегабайт… Ну вы поняли. У меня сейчас обычныя VPS-ка на 360Мб. В общем, причина зависаний была в том, что апач создавал кучу процессов и уходит в своп по самое нехочу. А вот вернуться оттуда он уже сам не мог - ему нужна была помощь.

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

ab -c 1 -n 100 http://blog.fxposter.org/

Эмм… Результата я не дождался.

Для тех, кто не работал с ab и не знает, что это такое - Apache Benchmark.

ab -c 1 -n 10 http://blog.fxposter.org/

Результат меня неприятно удивил. Результаты, к сожалению, не сохранились, но могу сказать точно, что время генерации страницы было около 1.5 секунды (судя по тому, что сейчас показывает генерация страницы, если её нет в кеше).

Собственно, стало понятно, как бороть “хабраэффект” - нужно сильно ускорить отдачу странички. Как? Да очень просто - кешированием. Слава богу, что это WordPress и тут есть такие плагины, как wp-cache - прикручивается за несколько минут и пока что отлично работает. Если бы такого плагина не было, то, наверное, у меня бы была сейчас статья о том, что такое Reverse Proxy и как его использовать для кеширования. :) А так - поставил, включил. Результаты:

Заодно решил немного пооптимизировать клиентскую часть - добавить expires и сжатие контента (использовался модуль апача deflate).

Приведу конечные файлы:

# /etc/apache2/mods-available/expires.conf
<IfModule mod_expires.c>

ExpiresActive On

ExpiresByType image/gif "access plus 1 weeks"
ExpiresByType image/png "access plus 1 weeks"
ExpiresByType image/jpeg "access plus 1 weeks"

ExpiresByType text/css "access plus 1 weeks"
ExpiresByType application/javascript "access plus 1 weeks"
</IfModule>
# cat /etc/apache2/mods-available/deflate.conf
<IfModule mod_deflate.c>
 # AddOutputFilterByType DEFLATE text/html text/plain text/xml

 DeflateCompressionLevel 9

 # Insert filter
 SetOutputFilter DEFLATE

 # Netscape 4.x has some problems...
 BrowserMatch ^Mozilla/4 gzip-only-text/html

 # Netscape 4.06-4.08 have some more problems
 BrowserMatch ^Mozilla/4\.0[678] no-gzip

 # MSIE masquerades as Netscape, but it is fine
 # BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

 # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
 # the above regex won't work. You can use the following
 # workaround to get the desired effect:
 BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

 # Don't compress images
 SetEnvIfNoCase Request_URI \
 \.(?:gif|jpe?g|png)$ no-gzip dont-vary

 <IfModule mod_headers.c>
 # Make sure proxies don't deliver the wrong content
 Header append Vary User-Agent env=!dont-vary
 </IfModule>
</IfModule>

Если вас интересует, почему эти файлы выглядят именно так - читайте документацию к модулям апача.

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

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

PS. С точки зрения клиентской оптимизации - css-ки и js-ки лучше бы собрать в один файл, а кучу запросов к изображениям заменить спрайтами. Заниматься первым особо не вижу смысла, т.к. и стилей и скриптов на блоге немного, а изображениями заниматься лень, т.к. все равно собираюсь переезжать на “Twenty Ten“.

written by fxposter \\ tags: , , , , ,

Jul 07

Есть такая фича в Rubygems, как установка гем-ов в директорию пользователя ~/.gem, если gem install запускается без sudo и, соответственно, у пользователя нет разрешения установить что-либо в дефолтную директорию.

В Rubygems до версии 1.3.6 это решалось просто - автоматически. Т.е. если вы вместо sudo gem install пишете gem install - вам выдается warning, но гем успешно устанавливается:

[fxposter@kitty ~]$ gem install haml
WARNING:  Installing to ~/.gem since /usr/lib/ruby/gems/1.8 and
/usr/bin aren't both writable.
Successfully installed haml-3.0.13
1 gem installed
Installing ri documentation for haml-3.0.13...
Installing RDoc documentation for haml-3.0.13...

Вроде бы всё замечательно. Но с версии 1.3.6 это дефолтное поведение изменилось, и при обновлении с помощью gem update --system об этом честно пишется:

–user-install is no longer the default. If you really liked it, see Gem::ConfigFile to learn how to set it by default. (This change was made in 1.3.6)

Но кто реально читают все эти тексты? Да и не все обновляют Rubygems таким образом. В нашем случае произошла смена сервера. Причем на старом сервере стояла старая версия Ruby Enterprise Edition и дефолтные Rubygems 1.3.5. На новом же серваке наши бравые админы опять всё “покомпилили” и вместе с REE у нас там обновился и Rubygems - теперь там стояла версия 1.3.7. И… сначала отвалился деплой, т.к. по умолчанию rake gems:install у нас там не включен. Запустили rake gems:install - не работает. Запустили gem install - не работает. Всё просто замечательно.

Разбирались долго. Сначала думали на админов, которые в рельсах плохо шарят и думали, что они там “понастраивали”. Кстати, понастраивали они действительно знатно - скомпилированный REE почему-то стоит поверх стандартного Ruby 1.8.5 (у нас там CentOS 5, в ближайшем времени переезжаем на Amazon EC2 на Ubuntu). Но это неважно. После долгого разговора с админом и ковыряния серваков я чисто случайно обратил внимание на разные версии Rubygems. Заподозрил неладное. Обновил их на старом серваке на 1.3.7 и… получил сообщение, написанное выше. Отлично. Теперь осталось восстановить поведение старых Rubygems.

В итоге всё оказалось довольно просто. В файл ~/.gemrc нужно дописать следующую строку: "install: --user-install". После чего мой .gemrc стал выглядеть так:

[waysgo@web-waysgo ~]$ cat .gemrc
---
:benchmark: false
:update_sources: true
:sources:
- http://rubygems.org/
- http://gems.github.com/
:bulk_threshold: 1000
:verbose: true
:backtrace: false
install: --user-install

written by fxposter \\ tags: ,