Рубрики
3. Инструментарий

Maven: Lifecycle, Phase, Goal

Для того, чтобы не запутаться в работе maven’а нужно разобраться с базовыми понятиями.

1. Жизненный цикл (lifecycle) :  default, clean, site.

2. Фазы (phase). Жизненный цикл состоит из чередования различных фаз. Например жизненный цикл clean состоит из фаз : pre-clean, clean и post-clean. Порядок выполнения важен. Если мы запустим mvn package , то также будут выполняться все предыдущие фазы: validate,compile, test и т.д.

3. Цели, задачи, голы (goal).  Фазы состоят из чередования голов, например: gwt:run, assembly:assembly, compiler:compile (т.е. голы они с двоеточием).  Для того, чтобы указать какие голы должны быть забиты в какой фазе нужно в pom.xml  отредактировать секцию plugin.  Так сделано потому, что голы создаются плагинами.

Вот такая матрёшка.

Жизненный цикл состоит из фаз, а фазы состоят из голов.

То есть, когда выполняется mvn clean gwt:run, мы проходим жизненный цикл clean, а затем забиваем гол gwt:run


Рубрики
4. Полезняшки

Мизинец программиста

Постановка задачи

Если Вы программист и используете среду разработки (IDE) более интеллектуальную чем блокнот, то скорее всего Вам часто приходится пользоваться различными горячими клавишами. В большинстве случаев это комбинации содержащие нажатие клавиши Ctrl. Например в NetBeans:

  • Ctrl + Пробел = Автодополнение
  • Ctrl+ Q = К месту последнего редактирования
  • Ctrl +W = Закрыть окно
  • Ctrl + / = Комментировать строку
  • Ctrl + E = Удалить строку
  • Ctrl + K = Следующее слово
  • и т.д.

Таким образом мы часто держим нажатой клавишу [Ctrl]. При этом расположение этой клавиши не совсем подходящее.  Одновременное нажатие  [Ctrl] и какой-нибудь кнопки левой рукой (например: Ctrl + E), может вызывать легкий дискомфорт в результате скрючивания мизинца на левой руке.

Известные способы решения

Рубрики
4. Полезняшки Java Шаблоны проектирования

Самый лучший Singleton

Из всех существующих на момент написания этого поста реализаций шаблона Singleton (одиночка) мне больше всего нравится эта:

 public class Singleton {
   // Private constructor prevents instantiation from other classes
   private Singleton() {}
 
   /**
    * SingletonHolder is loaded on the first execution of Singleton.getInstance()
    * or the first access to SingletonHolder.INSTANCE, not before.
    */
   private static class SingletonHolder {
     private static final Singleton INSTANCE = new Singleton();
   }
 
   public static Singleton getInstance() {
     return SingletonHolder.INSTANCE;
   }
 }

Эту реализацию придумал  Bill Pugh. Это гениальный и очень простой способ. При помощи элегантного использования внутреннего класса Вы получаете ленивый (объект Singleton не инициализируется до моменты вызова метод getInstance())  и потоко-безопасный Singleton.

Поскольку в классе Singleton нет статических полей которые нужно инициализировать, класс беспрепятственно загрузится. То есть Вам не нужно ждать, пока мы создадим объект Singleton в самом начале, когда загружаются классы.
Смотрим дальше, когда объект INSTANCE будет создан? Тогда, когда мы вызовем метод getInstance(), что повлечет загрузку внутреннего класса SingletonHolder, что спровоцирует создание объекта INSTANCE. Поскольку фаза инициализации класса гарантировано (спецификацией) «не конкурента«, то у нас нет необходимости использовать synchronized и volatile. Ура!

Рубрики
0. Мироощущение и бытие 4. Полезняшки

Книги о программировании

Cписок книг,  которые возможно будут интересны другим программистам

Эти книги не являются учебным пособием по какому-то конкретному языку программирования, в них практически нет больших листингов кода, описания API и другой технической информации.

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

Итак, приступим к обзору.