Home

Реклама

Настроить

Projects

Дек. 7, 2009 | 10:47 pm

Решил записать список проектов, в которых я принимаю участие, а то некоорые начали выпадать из головы...

  • AutoDAO (Java). Мегатулзень для создания DAO-слоя в приложениях, использующих Hibernate.
  • argouml-maven-plugin (Java). Плагин к Maven'у, генерирующий картинки из схем, нарисованных в ArgoUML.
  • Spring BeanDoc (Java). Генерируатор html-страничек с описанием контекста Spring.
  • maven-springbeandoc-plugin (Java). Плагин к Maven'у для Spring BeanDoc.
  • Gentoo on N8x0. Порт Gentoo Linux на нокиевские интернет-таблетки.
  • fb_text2screen (внезапно, C). Утилита для рисования букв на framebuffer-устройстве в Linux.
  • opendsme (внезапно, опять C). Библиотека для чтения и записи конфигурационных данных из специального раздела на нокиевских интернет-таблетках.
  • Gentoo Java herd (не менее внезапно, bash). Подпроект Gentoo Linux, занимающийся Java-софтом.
  • Portage (Python). Пакетный менеджер, используемый в Gentoo Linux
Метки: ,

ссылка | Оставить комментарий | в избранное | рассказать другу

Фиговина для проверки эксепшенов в тестах

Дек. 4, 2009 | 05:46 pm

Чуть-чуть кода )

Используется как-то так:
new ExpectException<NumberFormatException>(NumberFormatException.class) {
  @Override
  protected void run() {
    Integer.parseInt("ыыы");
  }
}.check();


Чем это лучше @Test(expectedExceptions = NumberFormatException.class) ?

А тем что когда тест состоит из нескольких statement'ов, expectedExceptions не позволяет проверить, какая именно из строчек теста приводит к эксепшену.

Хорошая статья на эту тему: TestNG and Expected Exceptions
Метки:

ссылка | Оставить комментарий {2} | в избранное | рассказать другу

Монтирование ресурсов в Wicket с помощью аннотаций

Дек. 2, 2009 | 10:18 am

Wicket: Annotation-based Mounting of Resources
Метки: ,

ссылка | Оставить комментарий {1} | в избранное | рассказать другу

О Servlet API, sendError и неправильном дизайне

Дек. 1, 2009 | 08:46 pm

Сегодня я расскажу вам о сломанном методе sendError.
Много букв )

ссылка | Оставить комментарий {2} | в избранное | рассказать другу

Доступ к сессии Wicket'а из запроса, обрабатываемого не Wicket'ом

Дек. 1, 2009 | 11:51 am

Собственно, сабж.

Делается крайне просто:

web.xml:
    <filter>
        <filter-name>wicketSessionFilter</filter-name>
        <filter-class>org.apache.wicket.protocol.http.servlet.WicketSessionFilter</filter-class>
        <init-param>
            <param-name>filterName</param-name>
            <param-value>$НАЗВАНИЕ_ФИЛЬТРА_ВИКЕТА</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>wicketSessionFilter</filter-name>
        <url-pattern>$КУДА_ВЫ_ЕГО_ТАМ_СОБРАЛИСЬ_МАППИТЬ</url-pattern>
    </filter-mapping>

Всё, теперь можно делать Session.get() и радоваться.

Нюанс: советую прописывать этот фильтр после фильтра с самим Викетом, во избежание всяческих неприятностей.

Ещё нюанс: перед вызовом Session.get() предварительно надо убедиться в существовании сессии с помощью Session.exists().
Метки: ,

ссылка | Оставить комментарий | в избранное | рассказать другу

IntelliJ IDEA, @NotNull и Maven

Ноя. 30, 2009 | 03:52 pm

У IDEA есть очень приятная фича для проверки кода на потенциальные NPE. Заключается она в развешивании по всему проекту аннотаций @NotNull/@Nullable и последующем статическом анализе + assert'ах в рантайме. В деталях описывать не буду, см. документацию.

Нюанс в том, что для того, чтобы появились assert'ы, надо соответствующим образом пропроцессить классы. При компиляции из самой идеи это происходит автоматически, однако не происходит, если проект собирается чем-то ещё (например, мавеном, который мне очень нравится).

Устранить эту неприятность крайне просто, достаточно добавить следующий фрагмент в pom.xml:

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>ideauidesigner-maven-plugin</artifactId>
      <executions>
        <execution>
          <goals>
            <goal>javac2</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    ...
  </plugins>
  ...
</build>


Помимо добавления assert'ов, этот плагин умеет генерировать классы свинговых форм из *.form файлов, производимых идеевским редактором GUI-интерфейсов.

Сами аннотации лежат в
<dependency>
  <groupId>com.intellij</groupId> 
  <artifactId>annotations</artifactId> 
  <version>7.0.3</version>
</dependency>
Метки: ,

ссылка | Оставить комментарий | в избранное | рассказать другу

Дапминг MySQL'я...

Ноя. 25, 2009 | 01:46 pm

MySQL при создании дампа пишет в него таблицы в каком-то случайном порядке. В результате загрузить дамп обратно можно _только_ при выключенных foreign key'ях. Поубивав бы.
Метки: ,

ссылка | Оставить комментарий {7} | в избранное | рассказать другу

AutoDAO теперь в центральной мавенской репе

Ноя. 24, 2009 | 05:40 pm

Моя маленькая, но чертовски полезная библиотечка AutoDAO теперь лежит в центральном репозитории мавена.

Что приятно, последующие её обновления тоже будут туда попадать, т.к. используется rsync, регулярно тягяющий новые файлы.

Спасибо товарищу Carlos Sanchez.
Метки:

ссылка | Оставить комментарий {5} | в избранное | рассказать другу

Java Exceptions

Ноя. 19, 2009 | 03:36 pm

Забудьте всё что вам раньше рассказывали про иерархию исключений в Java. Это всё враньё. Они утаили от вас самое главное.

Read more... )
Метки:

ссылка | Оставить комментарий {2} | в избранное | рассказать другу

Экономим батарейку выключая ненужные ядра

Ноя. 19, 2009 | 02:35 pm

Выкл:
for i in 1 2 3; do echo 0 > /sys/devices/system/cpu/cpu${i}/online; done


Вкл:
for i in 1 2 3; do echo 1 > /sys/devices/system/cpu/cpu${i}/online; done


via Patrick Lauer (bonsaikitten)
Метки:

ссылка | Оставить комментарий | в избранное | рассказать другу

SVN, merging

Ноя. 19, 2009 | 01:57 pm

Вот допустим есть у нас trunk, отфоркали мы feature-бранч и сидим в нём, девелопим. Додевелопили и говорим gatekeeper'у - давай, мёржи в trunk. Он делает svn merge $path_to_feature_branch и говорит упс, конфликты, давайте чините.

Вопрос. Что надо сделать в feature-бранче, чтобы она смогла смёржиться в trunk без конфликтов?

ссылка | Оставить комментарий {5} | в избранное | рассказать другу

SVN, tree conflicts

Ноя. 19, 2009 | 12:02 pm

wc1:
svn co $path
svn rm $file

wc2:
svn co $path
svn rm $file

wc1:
svn ci -m 'removed $file'

wc2:
svn up
!     C $file
      >   local delete, incoming delete upon update


И? Нахрен мне этот tree conflict, если всё, что я могу с ним сделать - сказать
svn resolve --accept working $file

Это зарезолвит конфликт, используя состояние из working copy, т.е. удалённое, т.е. такое же, как и в репозитории.

ссылка | Оставить комментарий | в избранное | рассказать другу

Java date and time API really sucks...

Ноя. 19, 2009 | 11:53 am

Calendar.getInstance().after("dates in Java suck") returns false.

via Mike Abney

Используйте Joda Time или ждите JSR-310, которая будет тем же самым, только в пакете java.*
Метки: ,

ссылка | Оставить комментарий | в избранное | рассказать другу

Ну зачем так делать...

Ноя. 18, 2009 | 06:28 pm

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

И при этом объяснять мне, что я не умею работать в команде.
Метки:

ссылка | Оставить комментарий {17} | в избранное | рассказать другу

unrelated

Ноя. 18, 2009 | 10:41 am


Installation of SQLite with "tcl" USE flag enabled provides more (TCL-unrelated) functionality.

ссылка | Оставить комментарий | в избранное | рассказать другу

MySQL...

Ноя. 17, 2009 | 06:01 pm

Нетранзакционное говно...

Attempt #1:
mysql> alter table taro_hardkeys add column deletiontime timestamp default null;
ERROR 1067 (42000): Invalid default value for 'deletiontime'

Attempt #2:
mysql> create table foo (deletiontime timestamp default current_timestamp);
Query OK, 0 rows affected (0.07 sec)                                       
 
mysql> show create table foo;
+-------+--------------------------------------------------------------------------------------+
| Table | Create Table                                                                         |
+-------+--------------------------------------------------------------------------------------+
| foo   | CREATE TABLE "foo" (                                                                  
  "deletiontime" timestamp NOT NULL default CURRENT_TIMESTAMP                                   
) |
+-------+--------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
 
mysql> alter table foo alter column deletiontime drop default;
Query OK, 0 rows affected (0.15 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
mysql> show create table foo;
+-------+------------------------------------------------------------+
| Table | Create Table                                               |
+-------+------------------------------------------------------------+
| foo   | CREATE TABLE "foo" (
  "deletiontime" timestamp NOT NULL
) |
+-------+------------------------------------------------------------+
1 row in set (0.00 sec)
 
mysql> insert into foo (deletiontime) values (NULL);
Query OK, 1 row affected (0.00 sec)
 
mysql> select * from foo;
+---------------------+
| deletiontime        |
+---------------------+
| 2009-11-17 18:16:02 |
+---------------------+
1 row in set (0.00 sec)
 

Result: FAIL.

Если у вас есть идеи, как в колонку типа timestamp таки засунуть null, я с интересом слушаю.
Метки: ,

ссылка | Оставить комментарий {6} | в избранное | рассказать другу

Маппинговая жопа

Ноя. 17, 2009 | 12:32 pm

XML-маппинги хибернейта + выключенный hibernate.hbm2ddl.auto (даже хотя бы validate) + база с местами отсутствующими, а местами не того типа колонками - это пипец.

Ну и естественно в половине мест название колонки не совпадает с названием поля в объекте. Зачем, блин, зачем это было сделано?

-1 товарищу [info]alexshubert за допущение такого безобразия.

Кстати, сторонники XML-маппингов. Покажите, как вы легко и удобно напишете маппинг для поля, выражаемый в виде аннотаций вот так:

@Column(nullable = false)
@Enumerated(EnumType.STRING)
private Location location;


где Location - это некий енум.

UPDATE: оно ещё и деньги в double'ах считает. Мда.
Метки:

ссылка | Оставить комментарий | в избранное | рассказать другу

И опять try/catch

Ноя. 16, 2009 | 06:21 pm

Стопицоттысячный баг, связанный с неправильным использованием try/catch. На этот раз в спринге:

SPR-6361: TransactionTemplate leaks transactions

ссылка | Оставить комментарий | в избранное | рассказать другу

Чуть мозг не вывихнул, пока настраивал микрофон на ноутбуке...

Ноя. 9, 2009 | 01:16 pm

Read more... )

При этом микрофон - это самый левый Capture, но для того чтобы оно работало, надо включить ещё как мимимум DAC0 (может ещё и DAC1, не помню уже), в Digital Input Source выбрать Digital Mic 1 (а совсем не Mixer или Analog Inputs) и пожертвовать пару девственниц.

Ну и, самый очевидный момент, прописать
options snd-hda-intel enable_msi=1
options snd-hda-intel model=hp-dv5

в /etc/modprobe.d/alsa, потому что иначе она неправильно автоопределяет звуковуху, в результате чего работает только спикер снизу. При этом, даже после прописывания, регуляторы Front и PCM всё-равно ни на что не влияют.

В противоположность этой закладке, вторая прекрасна в своей простоте - единственная галочка Mute и больше ничего.

ссылка | Оставить комментарий {4} | в избранное | рассказать другу

Тест Джоэла для Пронто

Окт. 16, 2009 | 06:35 pm

Пользуетесь ли вы системой контроля версий?
Можете ли вы собрать продукт за один шаг?
Выполняете ли вы ежедневные билды?
Используете ли вы базу данных ошибок?
Исправляете ли вы ошибки перед написанием нового кода?
Есть ли у вас актуальный план работ?
Есть ли у вас спецификация?
Предоставлены ли вашим программистам спокойные условия для работы?
Используете ли вы новейшее дорогое оборудование?
Есть ли у вас тестеры?
Пишут ли кандидаты на работу код во время собеседования?
Проводите ли вы коридорное тестирование удобства использования программ?

Итого: 10 из 12.

Неплохо.
Метки: , ,

ссылка | Оставить комментарий {2} | в избранное | рассказать другу

Реклама

Настроить