Рубрики
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


Рубрики
3. Инструментарий 4. Полезняшки Java

История о том, как я делал интернет-магазин на Java. Linux,Tomcat,MySQL и Java (No EJB,No Spring,No Hibernate).

В качестве предисловия

Большую часть своей профессиональной карьеры я занимался разработкой бизнес-приложений на Java. Программные продукты предназначались, как правило, для различных финансовых организаций  или других сопоставимых с ними по размеру коммерческих структур. Разработка велась для Enterprise Level оборудования и серверов приложения. Стоит отметить, что очень много java-программистов работает именно в этом секторе. Возможно Вы представляете, что это такое -- дорогое оборудование, широкий канал, быстрая память, база данных Oracle  и другие атрибуты безбедной IT-жизни...  Но бывает так, что условия меняются с точностью до наоборот.

Что делать, если нужно создать интернет-приложение для маленькой фирмы на хостинге со скромными ресурсами?

Начало

Несколько лет назад моя сестренка открыла магазин одежды в Нижнем Новгороде. Они с подружкой сами разрабатывали модели, закупали ткани и шили там же, в Нижнем Новгороде.

Я захотел ей как-то помочь. Мы решили, что было бы здорово создать сайт, на котором покупатели смогут просматривать каталог с моделями и размещать заказы на доставку, плюс будет возможность посмотреть схему проезда до магазинчика, информацию для оптовиков, объявления о распродажах и другие полезные мелочи.  По сути нужен был простой интернет-магазин для маленькой фирмы.

Конечно, не было речи о больших серверах, промышленных базах данных и других дорогих игрушках. Нужно было сделать что-то простое, шустрое и недорогое.

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

Мне сразу стало видно два пути:  PHP или Java. Чтобы сделать выбор, решил провести небольшие исследования, так как не хотелось изобретать велосипед. Поскольку этот сегмент разработки ПО был для меня новым, я поставил денвер, посмотрел на PHP-ные решения, потом скачал разные java-based CMS-ки, поинтересовался у хостеров, что они могут мне посоветовать, спросил у друзей PHP-ников.

В итоге сделал для себя выводы:

Рубрики
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-вского шкафа. Вы учитесь не столько самому программированию, сколько КАК надо программировать, учиться, жить.  Вы начинаете постигать дао программирования.

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