Wednesday, May 21, 2008

Докатились... 4,55 грн за доллар

Сегодня НБУ официально объявил о снижение официального курса доллара США к гривне до 4,85 грн за доллар. На протяжение последних несколько недель коммерческий курс доллар постоянно падал, на сегодня на межбанке доллар покупали на 4,55. Наличный курс также опустился до 4,55.

С инфляцией бороться нужно конечно, но это как то уж слишком. Хроники кризиса ликдвидности:

Январь-апрель 2008. НБУ и Кабмин проводят активную стерилизацию средств (накапливают деньги на счетах Казначейства). Остатки банков на корсчетах в НБУ понижаются с 20 млрд в январе до 13 млрд на 18 апреля.
21-13 апреля 2008. Недостаток денежных средств давит на позиции банков в ценных бумагах. Ставки overnight поднялись до 30%, при среднем значение 11%. Проблемы с ликвидностью ведут к обвалу фондового рынка. Индекс ПФТС падает за два дня 21-13 апреля на 10%.
19-21 мая. Скоро опять 20-е число, банкам и предприятиям пора платить в бюджет, но у них нет гривны, поэтому они продают валюту себе в убыток. Курс USD начинает снижаться, и достигает в среду значения 4,55 (и даже 4,5). Ситуация разогревает заявление чиновников НБУ о возможности ревальвация гривни. Большое количество людей, получающих зарплату в долларах, начинает нервно подсчитывать падение своих доходов.
20-21 мая. По слухам, с ПФТС выходят нерезиденты, ловя курсовую разницу. На ПФТС начинается падение, 5% за два дня.
21 мая. НБУ объявляет о снижении курса доллара.

Ситуация для меня непонятная. Почему в стране с ухудшающейся экономической обстановкой, с отрицательным сальдо внешнеторгового баланса, растет нац.валюта ? Чем этот рост будет поддерживаться ?

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

UPD. Похоже, намечается тенденция - 20 числа ужесточаются проблемы с ликвидностью, и доллар падает. После 20 (21, 22) доллар начинает расти. Два месяца уже так. Нужно посмотреть, можно ли этим воспользоваться.

Friday, May 16, 2008

OpenAds и русские буквы

Уже достаточно долго для показа баннеров я использую баннеровертелку OpenX (раньше называлась OpenAds, http://www.openx.org/). Для интеграции с сайтами, которые не используют PHP (а большинство у меня на Java), в OpenX используется XML-RPC.

Ну почему софт на PHP всегда такой глючный!

XML-RPC сервер в OpenX всегда возвращает ответ в кодировке UTF-8. Однако среди поддерживаемых OpenX кодировок нет UTF-8. Для русских символом есть koi8r и windows-1251. И когда в описании баннера присутствуют русские символы (в моем случае - в windows-1251), они не преобразовываются в UTF-8. В результате мой XML-RPC клиент от Apache выдает сообщение:
org.apache.xmlrpc.client.XmlRpcClientException: Failed to read servers response: Invalid byte 2 of 2-byte UTF-8 sequence.
at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:179)
at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:145)
at org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:94)
      ...
В списке рассылки Apache XML-RPC пользователи жалуются на похожую проблему, на что разработчики XML-RPC резонно отвечают, что это проблема сервера, и решать ее они в принципе не будут. Но баннеры нужно показать. Поэтому правим немного XML-RPC клиент. В метод
org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse
ставим первую строку
InputSource isource = new InputSource(ResponseFilter.filter(pStream));
и сам клас ResponseFilter
public class ResponseFilter {
  public static InputStream filter(InputStream input) {
      StringWriter s = new StringWriter();
    
      try {
          InputStreamReader r = new InputStreamReader(input, "windows-1251");
        
          int ch;
          while ((ch = r.read()) != -1) {
              s.write(ch);
          }
        
          input.close();
      } catch (IOException e) {
          throw new RuntimeException(e);
      }
    
      return new ByteArrayInputStream(s.toString().getBytes());
  }
}
Теперь работает.