develNotes

/*айтишные заметки*/

21.11.2014

Расстояние Левенштейна - что это и как использовать.

Расстояние Левенштейна между двумя строками - это минимальное количество операций вставки одного символа, удаления одного символа и замены одного символа на другой, необходимых для превращения одной строки в другую [Википедия]. Например, есть строки:

"text" и "text!"

Для того чтобы первую строку превратить во вторую, нужно добавить к ней символ "!", и наоборот - для того чтобы превратить вторую в первую - нужно удалить из нее восклицательный знак. Иными словами, нужно выполнить одну операцию. Это значение и называют расстоянием Левенштейна. Зачем используется такое понятие? Расстояние Левенштейна имеет множество практических применений. Например - различные утилиты, которые предназначены для мержа файлов исходного кода, утилита для сравнения текстов diff в Linux, нестрогое сравнение текстов - когда нужно "примерно" сравнить две порции текстовых данных, и прочее.


29.10.2014

Использование HTML5 для разработки мобильных приложений - плюсы и минусы подхода.

Одним из критериев успешности мобильного приложения является доступность вашей разработки для целевой аудитории, вне зависимости от того, какую платформу используют пользователи - Android, IOS, Windows Phone или что-то еще. Как известно, существуют различные средства, которые служат для создания мобильных приложений, используя HTML5. Одним из представителей таких средств является PhoneGap. PhoneGap - бесплатный open-source фреймворк для создания мобильных приложений, созданный Nitobi Software. Позволяет создать приложения для мобильных устройств используя JavaScript, HTML5 и CSS3, без необходимости знания «родных» языков программирования (например, Objective-C), под все мобильные операционные системы (iOS, Android, Bada и т. д.). Готовое приложение компилируется в виде установочных пакетов для каждой мобильной операционной системы [Википедия]. Какие есть преимущества и недостатки у подобного подхода к разработке мобильных приложений и в каком случае нужно использовать такие инструменты? 

Теги: html5 mobile     Далее

12.10.2014

Packt Publishing - экспресс доставка знаний.

Packt Publishing - издательство в Велкобритании, использующее технологию "печать по требованию" (когда тираж печатается после заказа определенного количества книг покупателем). Областью издательства являются книги, видео руководства, и просто статьи в области IT: для разработчиков, системных администраторов и пользователей. Сразу отмечу, что целью этого поста не является реклама, как это может показаться :). Недавно стал читать книги от этого издательства и хотел поделиться некоторыми соображениями и впечатлениями.

 

Теги: reading lifehack     Далее

12.10.2014

JavaEE: Пример использования Spring Security.

UPDATE: Возможно вам будет интересен пример использования Spring Security 4 и AngularJS.

Spring Security - фреймворк, предоставляющий удобную реализацию механизмов аутентификации и авторизации в Java EE приложениях. Раньше был известен как Acegi Security, а в 2008 году был включен в проект Spring. Является стандартом де-факто для веб-приложений Spring MVC. Использовать Spring Security очень удобно и просто - без особых усилий можно создать гибкую систему управления правами в вашем веб-приложении.

Для того, чтобы показать как это работает - приведу простой, но подробный пример приложения, которое использует Spring Securtiy. Приложение будет состоять из страницы входа и закрытой страницы, доступ к которой имеет только один пользователь. Как нетрудно догадаться, это будет веб-приложение Spring MVC. Итак, цель поставлена, инструменты определены, приступаем к делу!

Для примера создаем шаблонный проект веб-приложения Spring MVC, используя Spring Tool Suite (File > New > Spring Template Project > Spring MVC Project ).

После этого у нас уже есть простое веб-приложение, которое можно запустить на сервере (ссылку на полный код примера можно найти в конце поста). Первое что необходимо сделать - добавить в pom.xml необходимые зависимости:

<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-core</artifactId>
			<version>${org.springframework-version}</version>
</dependency>

<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-web</artifactId>
			<version>${org.springframework-version}</version>
</dependency>

<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-config</artifactId>
			<version>${org.springframework-version}</version>
</dependency>

22.08.2014

Еще одни крестики-нолики с использованием Java Swing.

Когда меня попросили помочь сделать/найти игру в крестики-нолики на Java с графическим UI (для двух игроков)  - первым делом я погуглил на предмет наличия готового и пристойно реализованного сабжа. Возможно я плохо искал, но все что мне попадалось было сделано плохо. Где-то размер игровой доски задан жестко, в большинстве найденных примеров на Java Swing - вся логика игры неподобающим образом смешана с пользовательским интерфейсом. В сети выложено немало реализаций этой игры, но почему бы не добавить еще одну? 

Итак, в этом примере  для создания пользовательского интерфейса используется Swing. Размер игровой доски 5x5:

Для выигрыша необходимо составить непрерывную линию из крестиков или ноликов длиной в 5 элементов. Врочем, размер поля и длину линии, которую нужно составить для выигрыша, можно легко изменить. Как видно на скриншоте, здесь используется тема Nimbus, которая включаена в JRE начиная с Java SE 6 Update 10. Структура проекта выглядит так:

В пакете ru.spbstu.tictactoe - классы, необходимые для создания графического интерфейса; в пакете ru.spbstu.tictactoe.common - классы, необходимые для создания игры в крестики-нолики, которые не привязаны к представлению (UI). Класс GameBoard является представлением игрового поля для игры в крестики-нолики, а также содержит все необходимые для реализации игры методы: 


14.08.2014

Инструменты под рукой - несколько удобных Java библиотек.

Одним из следствий популярности Java является несметное количество библиотек для этого языка, на все случаи жизни. Ввод/вывод, работа с файловыми архивами, парсеры различных форматов данных и прочее. Java - язык созданный для программистов, ориентированный в том числе на скорость разработки. Множество доступных библиотек делают разработку еще более быстрой. Кроме того, во многих случаях это снижает вероятность появления типичных ошибок в коде. Хочу привести четыре Java библиотеки, которые хорошо зарекомендавали себя на практике, которые мне приходилось использовать чаще всего при работе с Java SE и которые мне понравились больше всего. Само собой - вы можете найти еще множество хороших библиотек, которые подходят именно вам, а возможно - заменяют приведенные библиотеки. 

Apache Commons IO

Сайт: http://commons.apache.org/proper/commons-io/

Проект Apache Commons включает в себя очень много составляющих и Commons IO - лишь малая часть. С одной стороны - это настолько популярная библиотека, что наверное не нуждается в представлении. Но с другой - ее просто нельзя не упомянуть! Apache Commons IO, как можно догадаться по названию, служит для задач ввода/вывода. Широко и давно используется в мире Java, а значит - хорошо отлажена.

Посмотрим на пару элементарных примеров c классами IOUtils и FileUtils.

Класс IOUtils служит для работы с классами InputStream, OutputStream, Reader и Writer. Класс FileUtils служит для работы с классом java.io.File. Для того чтобы считать текст из файла с заданной кодировкой UTF-8, нужно написать примерно следующее:

public String readTextFromFile(String path)

 throws Exception {
  final String ENCODING = "UTF-8";
  return FileUtils.readFileToString(new File(path), ENCODING);
}
Теги: java programming     Далее