english | блог | контакт
Sat, 09 Jul 2011 @ 07:08

Хвостовая рекурсия в Scala

scala

Жизнь радует необходимостью и возможностью изучать новое и интересное. Например, scala. Знакомство, как это часто бывает, начинается со всяких вычислительных задачек, построения последовательностей, бессмысленной обработки списков, вычисления факториалов, рекурсивных и не очень алгоритмов.
Ага, рекурсия, хвостовая. И она там действительно есть :)

Нашёл "в интернетах", что в scala реализация сей фичи неспешна, проверил. За два года ситуация явно улучшилась.
читать дальше

Mon, 30 May 2011 @ 19:06

OAuth авторизация

oauth

На выходных развлекался с OAuth и авторизацией в социальных сетях. Вообще, библиотек "много разных есть", но выбор пал на scribe. Причина проста - там "из коробки" реализованы интерфейсы к различным провайдерам. Взял из maven-а (org.scribe/scribe), из коробки заработала авторизация в facebook, остальные (мне были необходимы вконтакте и одноклассники) пришлось допилить.
читать дальше

Wed, 11 May 2011 @ 15:33

Ещё один способ конфигурирования контекста в Spring 3.0

java spring

Случайно наткнулся. В spring 3.0 появилась такая штука как AnnotationConfigApplicationContext и AnnotationConfigWebApplicationContext. В соответствии с названиями позволяют конфигурировать контекст не в виде XML-файла, а с помощью аннотаций и методов класса, возвращающих готовые бины.

IntelliJ IDEA в версии 10.0.3 их пока не понимает (навигация между бинами отсутствует), зато пользователи сред не понимающих XML-конфигурацию, наверное, наслаждаются валидацией на уровне java-синтаксиса.

документация на офсайте

Sun, 27 Mar 2011 @ 19:55

Скрипт-помощник для siege

bash siege тестирование

Случайно написал скрипт для подготовки набора URL-ов для нагрузочного тестирования сайта с помощью siege. Использовать можно следующим образом:

$ siege_prepare.sh http://dchekmarev.ru/ 0
http://dchekmarev.ru/

$ siege_prepare.sh http://dchekmarev.ru/ 1
http://dchekmarev.ru/
http://dchekmarev.ru/blog/

$ siege_prepare.sh http://dchekmarev.ru/ 2
http://dchekmarev.ru/
http://dchekmarev.ru/blog/
[ и тут много ссылок внутри блога ]

$ siege_prepare.sh http://dchekmarev.ru/ 3
[ здесь будут все ссылки в количестве 132 штук на данный момент ]

$ siege_prepare.sh $SOME_URL $DEPTH_LEVEL

Ну, а затем можно говорить
$ siege_prepare.sh http://dchekmarev.ru/ 2 > urls.txt
$ siege -b -c 10 -t 10s -f urls.txt

читать дальше

Wed, 23 Mar 2011 @ 00:08

Качество фотографий в Google Picasa

google

Недавно был расстроен тем, что размер файла фотографии, загруженной из picasaweb как оригинал отличается от того оригинала, который сохранялся в альбом изначально. Проще говоря, picasa уменьшала размер фотографии на ~2-3%.

Предположение что пикаса жмёт фотографии и уменьшает качество меня пугало, так как некоторые исходники с диска я удалил, положившись на google.

Решил разобраться в ситуации. Для этого использовались пакеты googlecl и imagemagick из репозитория ubuntu.

Сразу озвучу результат: изображения оригинала и преобразования в google попиксельно идентичны.
читать дальше

Tue, 15 Mar 2011 @ 08:57

Конфигурация GIT

git

Нашёл (просто раньше не искал) конфигурацию GIT-а (eng), делающую жизнь более удобной.

Под "катом" то, что я взял для себя.
читать дальше

Thu, 28 Oct 2010 @ 16:12

ThreadPoolExecutor и очередь задач

concurrency java

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

void submitTask(ThreadPoolExecutor executorService, Runnable task) {
  executorService.submit(task);
}
boolean checkTaskInQueue(ThreadPoolExecutor executorService, Runnable task) {
  // а вот тут - баг:
  return executorService.getQueue().contains(task);
}

Не зная, ни за что не заподозрил бы сие строки. Ан нет, авторы даже в javadoc предостерегают от обращений к ThreadPoolExecutor.getQueue(), т.к. он хранит не засабмиченные объекты, а обёртки со ссылками на них.

Thu, 21 Oct 2010 @ 14:27

Тесты в модульных Maven-проектах

maven тестирование

Ситуация:
Проект на несколько модулей, тесты в которых имеют общий родительский класс (наследуется от того же TestCase или спрингового AbstractTransactionalDataSourceSpringContextTests), в который вынесена часть инициализации теста.

Проблема:
При сборке maven-ом в качестве зависимостей не тянутся классы тестов.

Решение (англоязычный оригинал):
В модуле, содержащем родительский класс в секцию build pom-модели добавить

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <executions>
  <execution>
    <goals>
       <goal>test-jar</goal>
    </goals>
  </execution>
</executions>
</plugin>

Этот код инструктирует maven о необходимости создания jar-архива (с суффиксом "-tests") с классами, которые были доступны при тестировании.

А в зависимом модуле добавляем ещё одну зависимость с <scope>test</scope> и <classifier>tests</classifier>

Mon, 27 Sep 2010 @ 17:53

Maven, XFire и старые проекты

maven xfire

Переводил один старый проект на Maven.

Перенос файлов, выяснение версий библиотек, подключение зависимостей - около двух часов. И больше часа чтобы выяснить, что старый XFire (который обновлять ну очень болезненно) тянет за собой библиотеки из java.net, где лежат битые pom-файлы вместо pom-файлов отдаётся 301-статус и переадресация, которая почему-то не обрабатывается мавеном 2.2.1 (и что описано в баге с 2009 года и всем фиолетово).

Как обычно, выручает mirrors.ibiblio.org, им спасибо:

<?xml version="1.0"?>
<settings>
  <mirrors>
    <mirror>
      <id>java.net</id>
      <name>java.net public repo</name>
      <url>http://mirrors.ibiblio.org/pub/mirrors/maven2</url>
      <mirrorOf>java.net</mirrorOf>
    </mirror>
  </mirrors>
</settings>

Fri, 24 Sep 2010 @ 08:03

dbcp и c3p0

c3p0 dbcp hibernate

Я не умею правильно готовить dbcp.

Есть проект, который с моего прихода в отдел (а говорят и с самого начала, 2006 года) периодически "подвисал". Лечили это его перезагрузкой. Попытки перекопать код плодов не приносили.

Этим летом, посмотрев stacktrace, проблема (наконец!) была локализована - блокировка в пуле соединений с БД. При этом сама база простаивала, просто "куда-то исчезали соединения".

В течении пары месяцев были опробованы все имеющиеся версии dbcp (от использовавшейся 1.2.1, до текущей 1.4.1) - с последними версиями "зависания" происходили даже чаще.

И тут один добрый человек порекомендовал просто сменить библиотеку. Подключили c3p0 - второй месяц, полёт нормальный.

Далее - стэктрэйс, если кто-то будет искать.
читать дальше

Страницы: 1 2 3 4 5 6 7 8