четверг, 7 апреля 2011 г.

Установка Apache Ant (Windows)

Описание того, как установить и запустить Ant под Windows (в моем случай Win 7).


Скачиваем с http://ant.apache.org/  последнюю версию Ant.
Прямой путь к последней на данный момент http://www.sai.msu.su/apache//ant/binaries/apache-ant-1.8.2-bin.zip
Распаковываем куда угодно, лично я распаковал прямо в корень на диск С.
Получилось "C:\ant"  в которой присутствует папка \bin

Собственно все, с Ant можно работать, но для того, чтобы вызывать его из любого каталога через командную строку, нужно прописать "переменные среды".
Заходим в "панель управления" -> "Система", слева щелкаем "Дополнительные параметры системы" и жамкаем кнопку переменные среды.
Переменные можно прописать как в переменные среды пользователя, так и в системные переменные. Чтобы не перезагружаться, я лично прописываю в переменные пользователя.


и так создадим переменную ANT_HOME  и присвоим ей значение "С:\ant\bin"


Создадим еще одну переменную PATH со значением %ANT_HOME%;  Надо сказать, что она просто содержит в себе то же значение что и ANT_HOME, но чтобы не менять в двух местах значения, сделаем ее как ссылку




Открываем  командную строку CTRL+R  пишем в поле cmd жмем Enter
открылась командная строка, пишем
ant
и
ant -version
если получили то, что видите на картинке ниже, значит Ant установлен правильно и работает.

















Обо всем этоми многом другом читайте на http://ant.apache.org/manual/index.html

пятница, 1 апреля 2011 г.

Разница между двумя датами Java

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


import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.Calendar;
import java.util.TimeZone;

public class Diff
{
public static void printDiff(String sdate1, String sdate2, String fmt, TimeZone tz)
{
SimpleDateFormat df = new SimpleDateFormat(fmt);

Date date1 = null;
Date date2 = null;

try
{
date1 = df.parse(sdate1);
date2 = df.parse(sdate2);
}
catch (ParseException pe)
{
pe.printStackTrace();
}

Calendar cal1 = null;
Calendar cal2 = null;

if (tz == null)
{
cal1=Calendar.getInstance();
cal2=Calendar.getInstance();
}
else
{
cal1=Calendar.getInstance(tz);
cal2=Calendar.getInstance(tz);
}


// different date might have different offset
cal1.setTime(date1);
long ldate1 = date1.getTime() + cal1.get(Calendar.ZONE_OFFSET) + cal1.get(Calendar.DST_OFFSET);

cal2.setTime(date2);
long ldate2 = date2.getTime() + cal2.get(Calendar.ZONE_OFFSET) + cal2.get(Calendar.DST_OFFSET);

// Use integer calculation, truncate the decimals
int hr1 = (int)(ldate1/3600000); //60*60*1000
int hr2 = (int)(ldate2/3600000);

int days1 = (int)hr1/24;
int days2 = (int)hr2/24;


int dateDiff = days2 - days1;
int weekOffset = (cal2.get(Calendar.DAY_OF_WEEK) - cal1.get(Calendar.DAY_OF_WEEK))<0 ? 1 : 0;
int weekDiff = dateDiff/7 + weekOffset;
int yearDiff = cal2.get(Calendar.YEAR) - cal1.get(Calendar.YEAR);
int monthDiff = yearDiff * 12 + cal2.get(Calendar.MONTH) - cal1.get(Calendar.MONTH);


System.out.println();
System.out.println("DateTime 1: " + sdate1);
System.out.println("DateTime 2: " + sdate2);

System.out.println("Date difference : " + dateDiff);
System.out.println("Week difference : " + weekDiff);
System.out.println("Month difference: " + monthDiff);
System.out.println("Year difference : " + yearDiff);
}


public static void main(String[] args)
{
String fmt = null;
String sdate1 = null;
String sdate2 = null;

fmt = "MM-dd-yyyy HH:mm:ss";
sdate1 = "12-31-2002 23:59:59";
sdate2 = "01-01-2003 00:00:01";

// Result is independent of format
// null will print in local timezone
// Print out 1 day, i month, 1 year difference
System.out.println("In your local time:");
printDiff(sdate1, sdate2, fmt, null);

// Beijing timezone, if you are not in +8 timezone, the resuls are all 0's
System.out.println("In Beijing time:");
printDiff(sdate1, sdate2, fmt, TimeZone.getTimeZone("GMT+08:00"));

// for testing the weekDiff
fmt = "MM-dd-yyyy HH:mm:ss";
sdate1 = "12-31-2002 23:59:59";
sdate2 = "01-06-2003 00:00:01";
System.out.println("In your local time:");
printDiff(sdate1, sdate2, fmt, null);

fmt = "MM-dd-yyyy HH:mm:ss";
sdate1 = "01-04-2003 23:59:59";
sdate2 = "01-05-2003 00:00:01";
System.out.println("In your local time:");
printDiff(sdate1, sdate2, fmt, null);

// something interesting here
fmt = "MM-dd-yyyy HH:mm:ss";
sdate1 = "12-31-1996 23:59:59";
sdate2 = "01-01-1997 00:00:01";
System.out.println("In your local time:");
printDiff(sdate1, sdate2, fmt, null);
}
}

среда, 23 марта 2011 г.

Установка JDK 6 на Ubuntu 10.10

Чтобы получить список установленных java-машин, выполним в терминале команду:

sudo update-java-alternatives -l

скорее всего получим следующее:

java-6-openjdk 1061 /usr/lib/jvm/java-6-openjdk

Выполним поочередно следующие команды:
sudo apt-get install python-software-properties
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo apt-get update
sudo apt-get install sun-java6-jre sun-java6-plugin
sun-java6-jdk
 
После установки в установленных jvm'ах увидим:
java-6-openjdk 1061 /usr/lib/jvm/java-6-openjdk
java-6-sun 63 /usr/lib/jvm/java-6-sun
 
Сделаем  jvm от sun используемой по-умолчанию:
 
sudo update-java-alternatives -s java-6-sun
 
Так же не забудем прописать переменные окружения в файле /etc/environment
 
JDK_HOME="/usr/lib/jvm/java-6-sun"
JAVA_HOME="/usr/lib/jvm/java-6-sun"

пятница, 18 марта 2011 г.

Netbeans, горячие клавиши (Netbeans hotkeys)

Честно сплагиатил отсюда очень полезную для себя и других инфу, не понятно - зачем было джаваскриптом защищать текст от копирования. Пришлось сначала сохранить всю страничку, потом удалить скриптик и сохранить, а уж затем скопировать. Хотя наверняка можно было firebag'oм быстрее все сделать.
  • Поиск и замена
Ctrl+F3 - Поиск слова, находящегося у курсора
F3/Shift+F3 - Поиск слудующего/предыдущего вхождения слова в файле
Ctrl+F/H - Поиск/Замена в файле
Alt+F7 - Поиск использований
Ctrl+Shift+F/H - Поиск/замена в проектах
Alt+Shift+U - Поиск результатов использования
Alt+Shift+H - Отключить подсветку результата поиска
Ctrl+R - Переименовать
Ctrl+U, then U - Конвертация выделенного текста в верхний регистр
Ctrl+U, then L - Конвертация выделенного текста в нижний регистр
Ctrl+U, then S - Инверсия регистра букв выделенного текста
Ctrl+Shift+V - Вставка отформатированного текста
Ctrl+I - Перейти в поле "Быстрый Поиск"
  • Навигация по исходному коду
Ctrl+O/Alt+Shift+O - Перейти к типу/файлу
Ctrl+Shift+T - Перейти к JUnit тесту
Alt+O - Перейти к источнику
Ctrl+B - Перейти к объявлению переменной
Ctrl+G - Перейти к строке, задав ее номер
Ctrl+Shift+M - Добавить/Удалить заметку
Ctrl+Shift+Period/Comma - Следующая/Предыдущая заметка
Ctrl+Period/Comma - Следующая/Предыдущая использование/ошибка компиляции
Ctrl+Shift+1/2/3 - Выделить в проектах/файлах/фаворитах
Ctrl+[ - Переместить курсор к открывающейся/закрывающейся скобке от соответствующей закрывающейся/открывающейся скобки
Ctrl+K/Ctrl+Shift K -  Следующее/предыдущее совпадение слова
Alt+Left/Alt+Right/Ctrl+Q - Перейти к предыдущему/следующему/последнему редактированию
Alt+Up/Down - Следующее/предыдущее встречаемость данной переменной
  • Программирование на языке Java
Alt+Insert - Сгенерировать код
Ctrl+Shift+I - Исправить все импорты класса
Alt+Shift+I - Исправить выделенный импорт класса
Alt+Shift+F - Отформатировать текст согласно кодинг-стайлу
Alt+Shift+Left/Right/Up/Down - Переместить строку влево/вправо/вверх/вниз на одну табуляцию
Ctrl+Shift+Up/Down - Скопировать и вставить текущую строку выше/ниже
Ctrl/Alt+F12 - Просмотр членов класса/всей иерархии класса
Ctrl+/ - Закомментировать/Раскомментировать текущую строку
Ctrl+E - Удалить текущую строку

При написании кода очень удобно использовать сокращения
часто повторяемых участков кода. Схема использования:
сокращение+Tab
  • Сокращения для Java редактора
En - Enumeration
Ex - Exception
Ob - Object
Psf - public static final
Psfb - public static final boolean
Psfi - public static final int
Psfs - public static final String
St - String
ab - abstract
bo - boolean
br - break
ca - catch (
cl - class
cn - continue
df - default:
dowhile - do {} while (condition);
eq - equals
ex - extends
fa - false
fi - final
fl - float
forc - for (Iterator it = collection.iterator(); it.hasNext();) {Object elem = (Object) it.next();}
fore - for (Object elem : iterable) {}
fori - for (int i = 0; i < arr.length; i++) {}
fy - finally
ie - interface
ifelse - if (condition){}else {}
im - implements
iof - instanceof
ir - import
le - length
newo - Object name = new Object(args);
pe - protected
pr - private
psf - private static final
psfb - private static final boolean
psfi - private static final int
psfs - private static final String
pst - printStackTrace();
psvm - public static void main(String[] args){}
pu - public
re - return
serr - System.err.println ("|");
sout - System.out.println ("|");
st - static
sw - switch (
sy - synchronized
tds - Thread.dumpStack();
th - throws
trycatch - try {} catch (Exception e) {}
tw - throw
twn - throw new
wh - while (
whileit - while (it.hasNext()) {Object elem = (Object) it.next();}

От себя добавлю - если нужно быстро переключиться между открытыми вкладками (файлами) нажимайте  CTRL+TAB

П.С.  комбинация CTRL+TAB присутствует и в Firefox'e ))))

среда, 16 марта 2011 г.

Еще раз о датах в Java

Наткнулся на еще одну интересную статью про даты в java, принял на вооружение :-)
В ней говориться о том как получить дату и обнулить время. И как не получить время полдень, т.е. 12 вместо полуночи 00.

пятница, 4 марта 2011 г.

Запуск двух и более экземпляров Netbeans

Со временем начинает не хватать одного окна с запущенной IDE. А запускать любимый Netbeans в новом окне по-умолчанию нельзя. Поискав в google информацию на эту тему, я за пару минут нашел пост на одном из блогов, вот ссылка на оригинал: Opening multiple NetBeans IDE instances simultaneously. В результате приведенных ниже манипуляций мы получим возможность запускать любое кол-во экземпляров Netbeans:

















Для начала создадим две (или больше при желании) рабочих директории для системных файлов Netbeans.
Я сделал такие:

C:\NBUsersDirs\nbuserdir1
и
C:\NBUsersDirs\nbuserdir2

После этого создайте копию ярлыка для запуску Netbeans. Каждый ярлык будет запускать свой экземпляр IDE.
У меня их два, названы они соответственно.








В свойствах каждого ярлыка допишите параметр запуска:  --userdir путь к дирректории
У меня получилось так:

--userdir C:\NBUsersDirs\nbuserdir1
и
--userdir C:\NBUsersDirs\nbuserdir2


















Для того, чтобы узнать какой экземпляр уже запущен (мало ли забыли), можно посмотреть это в пункте меню Netbean - About.






























Важно!
После создания директорий и ярлыков, не пытайтесь после запуска Первого ярлыка, после того как в первой директории появятся файлы, скопировать их во вторую папку - ничего не выйдет. Скопироваться-то оно конечно скопируется, а вот к желаемому результату не приведет. Уж не знаю как там чего настроено, но при простом копировании, системных файлов из папки в папку запуска второго экземпляра не происходит - не тратьте время.
Единственное, на чем можно сэкономить время и трафик (при апдейте)  - скопировать в первую директорию файлы из директории, где по-умолчанию лежат файлы Netbeans. У меня это был путь: C:\Users\Nix\.netbeans\6.9     Его вы можете посмотреть при запуске Netbeans без параметров в меню About.

Все вышеописанное 100% работает на Windows 7. Как это реализовать на Linux, я не представляю, но надо будет, думаю, разберусь :)

В плане работы в нескольких окнах IDE рулит IDEA. Да и вообще в ней есть еще не мало плюшек. Тем не менее заменить одно другим, как оказалось на практике, не панацея. Всегда может возникнуть задача, которую быстрее выполнить в одной и дольше в другой IDE.