November 25, 2011

JUnit + javax* : "not native or abstract in class file"

    При использовании javax-библиотек, например, таких так "javaee-web-api", "javaee-api" или "mail", в ходе выполнения JUnit-тестов может появиться сообщение об ошибке следующего характера:
Absent Code attribute in method that is not native or abstract in class file
    Для решения этой проблемы необходимо убрать из списка зависимостей в pom.xml javax-библиотеки, а вместо этого сделать следующее:

1. В список репозиториев добавить "JBoss Repository":
<repository>
   <id>repository.jboss.org</id>
   <name>JBoss Repository</name>
   <url>http://repository.jboss.org/nexus/content/groups/public-jboss/</url>
</repository>
2. В список зависимостей добавить ссылку на спецификацию jboss-javaee, например:
<dependency>
   <groupId>org.jboss.spec</groupId>
   <artifactId>jboss-javaee-6.0</artifactId>
   <version>3.0.0.Beta1</version>
   <type>pom</type>
</dependency>

November 11, 2011

Hibernatetemplate + sql-query + return-scalar + xml

   Ситуация: необходимо в xml-файле мэппинга hibernate описать native-sql запрос, возвращающий некоторый скалярный результат.
  Например, для таблицы пользователей в postgres необходимо сформировать запрос, сообщающий, занят логин или нет. При этом для его выполнения необходимо использовать Hibernatetemplate от Spring. В этом случае в файле мэппинга описание будет иметь, например, такой вид:
<sql-query name="isLoginUsedNativeSQL">
    <return-scalar column="login_used" type="true_false" />
    <![CDATA[
        select (count(usr.id)>0) as login_used from user_ usr where usr.login=?
    ]]>
</sql-query>
    Метод слоя DAO, вызывающий этот запрос:
@Override
public Boolean isLoginUsed(String login) {
    List result = getHibernateTemplate().findByNamedQuery("isLoginUsedNativeSQL", login);
    return (Boolean) DataAccessUtils.requiredSingleResult(result);
}
    где DataAccessUtils это класс
org.springframework.dao.support.DataAccessUtils

jQuery Backward Timer (Таймер обратного отсчёта)


ACHTUNG! ВНИМАНИЕ! ATTENTION!

Таймер обратного отсчета вынесен в отдельный jQuery-плагин. Всю необходимую информацию можно получить на странице плагина. Текст ниже оставлен для истории.


    Таймер обратного отсчёта, имеющий следующие возможности:
  1. установка времени отсчёта в секундах;
  2. установка названий единиц измерения;
  3. выполнение действия по истечению установленного времени.
     Пример работы:
 
    Исходный код примера:
<div style="background: #ddf; color: 77a; padding: 3px 30px; border: 1px #99a dashed; margin: 5px 0;">
    <span id="timerOutput"></span><br/>
</div>

<script type="text/javascript"
    src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript"
    src="http://dl.dropbox.com/u/76022516/proj/js/timerBackward.js"></script>

<script type="text/javascript">
$(document).ready(function() {
    $('#timerOutput').addAndRunBackwardTimer({
        seconds: '172800',
        timeUnitsNames: {
            h: "ч",
            m: "мин",
            s: "сек"
        },
    })
});
</script>
    Если необходимо вызвать какую-то функцию по истечении времени, то это будет выглядеть примерно так:
<script type="text/javascript">
function foo() {
//
}

$(document).ready(function() {
    $('#timerOutput').addAndRunBackwardTimer({
        seconds: '100000',
        timeUnitsNames: {
            h: "ч",
            m: "мин",
            s: "сек"
        },
        onTimerStop : foo
    })
});
</script>
   Использование "$(document).ready()" необязательно. Вообще, зависимость от jQuery очень незначительна и при необходимости можно легко переписать на чистом js.

[Ссылка на скрипт]

November 10, 2011

kdeinit4 craches on startup (kdeinit4 падает при запуске)

  Проблема: после запуска KDE появляется сообщение о падении kdeinit4. Отправить разработчикам отчет об ошибке невозможно из-за отсутствия хоть какой-то информации о проблеме. 
   Нагуглив тему с идентичной проблемой, нашел в её конце решение проблемы. Оно нашлось в смене бэк-энд библиотеки phonon-a c VCL на GStreamer.
    Для Archlinux:
sudo pacman -S phonon-gstreamer
    После этого выполнить проверку настроек:
System Settings -> Hardware -> Multimedia -> Phonon -> Backend
    Там должен быть выбран Gstreamer:

November 05, 2011

Квантовая ловушка

    "Израиль продемонстрировал миру квантовую левитацию" - заголовок статьи на mignews.
    Видео само говорит за себя:


    Подробнее в самой [статье].
    И еще одно видео:

November 02, 2011

Установка Ruby on Rails

1
Установить Git. Примеры команд для linux:
#ubuntu
sudo apt-get install git

#archlinux
sudo pacman -S git
2
Выполняем то, что написано [здесь]. В общем случае это выглядит так:
1
Загрузить свежую версию установочного скрипта RVM и выполнить его:
$ bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )
2
Загрузить RVM в качестве функции для сессий в терминале:
$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile
3
Перезагрузка настроек терминала:
$ source ~/.bash_profile
4
Тест функции:
$ type rvm | head -1
rvm is a function
5
Просмотр доступных версий:
$ rvm list known
6
Установка определенной версии Ruby:
$ rvm install 1.9.2
7
Использование установленной версии по умолчанию:
$ rvm use 1.9.2 --default
8
Установка Rails:
$ gem install rails
3
После этого можно создать тестовое приложение, например, как описано [здесь].



    Если при выполнении
rails server
    получается сообщение об ошибке:
Could not find a JavaScript runtime.
    то необходимо в Gemfile проекта дописать следующее:
gem 'execjs'
gem 'therubyracer'
    Для установки therubyracer необходимо наличие установленного nodejs. В директории проекта осталось выполнить:
bundle install



   Проверено на Ubuntu и Archlinux.

November 01, 2011

Tapestry: StackMapTable format error: bad class

    При использовании Tapestry можно получить сообщение об ошибке "StackMapTable format error: bad class...", которое может появиться в результате выброса некоего исключения "RequestExceptionHandler". В моем случае ошибка происходила при обыкновенной проверке на NULL параметра из HttpServletRequest-а.
     Для решения проблемы необходимо в список maven-зависимостей добавить зависимость от свежего "Javassist". Необходимую информацию можно получить [здесь].

maven-surefire-plugin: No tests were found

    Если maven-surefire-plugin не находит тесты для JUnit версий 4.х, то в pom.xml в список зависимостей плагина добавить артефакт "surefire-junit4". В общем случае описание плагина будет иметь следующий вид.
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.8</version>
   <dependencies>
      <dependency>
         <groupId>org.apache.maven.surefire</groupId>
         <artifactId>surefire-junit4</artifactId>
         <version>2.8</version>
         </dependency>
   </dependencies>
</plugin>