Служу России!

среда, 12 декабря 2012 г.

Пришло время отдать долг Родине. Университет позади и ближайший год я буду развлекать себя выполняя роль рядового Российской армии. Надеюсь время пролетит не заметно и я не успею забыть как писать Hello world!

Как разделить модульные и интеграционные тесты с помощью Maven

четверг, 22 ноября 2012 г.

В теории, модульные тесты не должны зависеть от окружения. Для проверки работоспособности системы в приближенных к реальности условиях, пишутся интеграционные тесты. Для них в maven предусмотрена отдельная фаза сборки проекта.

В этой статье хотелось бы поделиться опытом ее использования.

JUnit, параметризованные тесты и Spring IoC

понедельник, 19 ноября 2012 г.

Чтобы не подымать руками контекст Spring-а в каждом модульном тесте на JUnit, был придуман SpringJUnit4ClassRunner. Но его использование делает невозможным применение еще одного очень плезного запускальщика тестов: Parameterized. И тут возникает проблема, как усидеть на двух стульях сразу: писать параметризованные тесты и пользоваться Spring.

Интеллектуальные системы. Алгоритм поиска оптимального хода в игре Крестики-нолики

вторник, 13 ноября 2012 г.
Уверен, многие успели насладиться великолепным квестом  Machinarium. Вы наверняка помните того робота, которого надо было обыграть в баре, чтобы получить необходимые болтики. Так вот, игра, в которую его надо было обыграть, очень похожа на  крестики-нолики, но имеет поле 10 на 10 и продолжается, пока один из игроков не выстроит ряд из пяти фигурок.

Продолжая тему интеллектуальных систем, предлагаю написать алгоритм для игры в крестики-нолики по правилам, предложенным в Machinarium.

Сыграть!

Mylyn. Подключаемся к Bitbcaket Issues

понедельник, 29 октября 2012 г.
Не стану рассказывать зачем нужны и почему удобны системы отслеживания ошибок. О том, что такое Mylyn и почему это хорошо, можно почитать на хабре. В статье я лишь расскажу как подружить между собой mylyn и сервис Issues с Bitbucket.org

Компонент JGraphTree

понедельник, 22 октября 2012 г.
Компонент JGraphTree позволяет отрисовывать деревья, представленные стандартным интерфейсом TreeModel, в виде графа. Компонент писался под собственные нужды и на идеальное исполнение не претендует. Архив с исходным кодом, документацией и библиотекой с компонентом можно взять тут. Под катом пример использования компонента и небольшие пояснения к его устройству.

Maven. Плагины для сборки простых проектов

среда, 17 октября 2012 г.
При сборке простых десктопных проектов или библиотек с помощью maven, возникают распространенные задачи, вроде конфигурирования компилятора, создания jar-файла и файла манифеста, копирования ресурсов и им подобные. Все эти задачи, естественно, легко решаются в maven с помощью плагинов. В статье дается беглое описание и простые примеры использования плагинов, для решения наиболее популярных задач, встречающиеся при сборке проектов.

Как построить дерево в виде графа

понедельник, 15 октября 2012 г.
Древовидный граф - распространенная структура данных в программировании и часто применяемая в алгоритмах. Содержимое этой структуры тяжело поддается исследованию во время отладки, в силу того, что практически всегда описывается одним узлом ссылающимся на своих потомков. Т.е. чтобы получить значение некоторого узла, приходится выполнять нетривиальный обход дерева. И тут на помощь может придти визуальное представление такого графа. Построение графа в виде компактного и легко воспринимаемого дерева, задача нетривиальная и имеет безусловно множество решений. В статье хотелось бы поделиться собственным "колесом" для решения этой задачи.

Разбор аргументов командной строки в Java

воскресенье, 30 сентября 2012 г.

Графический интерфейс не всегда бывает наиболее удобным способом взаимодействия с программой. Зачастую приложение, запускаемое в командной строке с некоторым набором команд, гораздо удобнее в эксплуатации. При разработке такой программы, встает задача разбора аргументов ее запуска, что само по себе не всегда бывает тривиальной задачей. К счастью, как и большинство других распространенных задач, задача разбора аргументов командной строки уже решена во множестве библиотек. В этой статье я кратко опишу две популярные библиотеки, в основе которых лежат два, несколько отличающихся, подхода к решению этой задачи.

Как сохранить вкладки в Gnome terminal

четверг, 27 сентября 2012 г.

Привык держать открытыми несколько вкладок терминала с определенными рабочими директориями. Открывать вкладки и переходить в нужные директории каждый раз после перезапуска терминала утомительно. К счастью, gnome-terminal позволяет настроить, сколько и каких вкладок надо открыть при запуске. К несчастью, настройка не самая предсказуемая (лично мне пришлось покопаться, пока дошел до решения).

Управление зависимостями в eclipse с помощью Maven.

вторник, 25 сентября 2012 г.
В крупных проектах, где количество сторонних библиотек растет едва ли не быстрее количества написанных строк кода, управление зависимостями и поддержание их перечня в актуальном состоянии у всех членов группы разработчиков становится весьма сложной задачей. И здесь, как нельзя кстати, на помощь приходит Maven.

Взаимодействие из Java с IBM Websphere MQ 6

пятница, 21 сентября 2012 г.
Я уже рассказывал о том, как получать и отправлять сообщения с помощью JMS. Но мой рассказ строился на том, что JNDI контекст уже получен, хотя его получение достаточно нетривиальная задача. Сегодня я постараюсь восполнить этот пробел.

Как в Java сравнить содержимое двух директорий

вторник, 18 сентября 2012 г.
Возникла необходимость сравнить две директории по содержимому. Готового решения гугл не подсказал, пришлось городить собственное решение.

Исходный код

Установка IBM Websphere MQ 6.0 на Ubuntu 10.04

пятница, 3 августа 2012 г.

Сложность задачи заключается в том, что в качестве дистрибутива linux, IBM рекомендует RHEL или SLES. Оба дистрибутива используют пакеты в формате rpm. Делюсь опытом установки Websphere MQ 6.0 (C8472ML.tar.gz), fix pack (6.0.2-WS-MQ-LinuxIA32-FP0010.tar.gz) на Ubuntu 10.04.

Настраиваем eclipse для работы с tomcat под ubuntu

понедельник, 30 июля 2012 г.

Чтобы настроить Eclipse на работу с сервером Tomcat, ему необходимо указать директорию с сервером (installation directory). Проблема в том, что если устанавливать Tomcat из репозитория Ubuntu,  то он размазывается по системе, в частности, директории CATALINA_HOME и CATALINA_BASE оказываются разнесены в /usr/share/tomcat6 и /var/lib/tomcat6 соответственно. При указании eclipse директории CATALINA_HOME, он начинает искать директорию conf в ней и, естественно, не находит, т.к. она находится в CATALINA_BASE. Для решения этой проблемы есть несколько путей.


Коротко о том, что такое Ajax

понедельник, 2 июля 2012 г.
Ajax уже достаточно зрелая и популярная технология. Для работы с ней создано множество библиотек и компонентов на столько качественных и удобных, что можно вполне успешно разрабатывать веб-проекты и не знать всех тонкостей ajax.



Но естественно, так дело не пойдет! Пришла пора заглянуть под капот ajax-компонентов и узнать, что на самом деле представляет из себя ajax.

Http в Java. Часть 2.5 - Простой web server.

пятница, 29 июня 2012 г.
Предыдущая статья оказалась достаточно объемной и в то же время не законченной. Привести пример HTTP клиента и не показать простейшего HTTP сервера, это как сказать "а" и забыть про "б". Пришло время все исправить.


Libre Office. Math

пятница, 22 июня 2012 г.
 Для генерирования формул, в состав офисного пакета Libre Office, входит приложение Math. Это средство интегрировано в остальные пакеты и позволяет наибрать формулы не покидая Writer или Impress. Принцип построения формул в LibreMath похож на то, что предлагает TeX, но обладает собственным синтаксисом и главное, позволяет сразу видеть конечный вариант набираемой формулы. Поверьте, это просто "небо и земля" по сравнению с "мышкотырканьем", предлагаемым MathType!

Libre Office. Альтернативный способ создания библиографического списка

суббота, 9 июня 2012 г.
Указанный мной, в конце статьи, недостаток предложенного метода, на практике может обернуться серьезной проблемой (приведите пару раз в порядок список из over9000 источников и наткнитесь на необходимость его автоматического обновления, и вы поймете всю глубину проблемы).

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

Предлагаемый мной альтернативный способ заключается в реализации именно такого подхода.

Libre Office. Оформление списка использованных источников

вторник, 5 июня 2012 г.

В этой статье я поделюсь своим скромным опытом оформления списка использованных источников в курсовых/дипломных работах, выполненных в LibreOffice (OpenOffice) 3.

Подход "в лоб", к решению данной проблемы, может показаться нудным и ужасно муторным, но грамотное решение оказывается чертовски простым делом!


Интегрируем меню Eclipse в Ubuntu

воскресенье, 13 мая 2012 г.
Eclipse отличное IDE. Но к сожалению, на меленьких мониторах он не шибко удобен в силу размашистого интерфейса. Проблема с интеграцией его меню в Ubuntu ощутимо усугубляет дело. Но к счастью проблема поправима. Решение с глобальным меню для эклипса нашел на соседнем блоге и оно гениально! Оказывается, eclipse тупо добавлен в черный список. Достаточно его оттуда убрать и будет счастье!

Как создать собственный компонент в swing

среда, 4 апреля 2012 г.
Небольшая выдержка из замечательной книги по Swing: "Swing. Эффективные пользовательские интерфейсы" Ивана Портянкина, посвященная созданию собственного графического компонента. Статья раскрывает самый важный нюанс создания собственного компонента - программирование отрисовки его внешнего вида.

Шпаргалка по JUnit 4

воскресенье, 1 апреля 2012 г.

JUnit



    Краткий перечень аннотаций, используемых в библиотеке модульного тестирования JUnit 4.

Интеллектуальные системы. Алгоритм A* и игра "Пятнашки"

четверг, 22 марта 2012 г.
Повседневная работа современного программиста редко открывает простор для развития творческого мышления. Чаще всего, для решения задач нам достаточно применить проверенное временем решение: паттерн или библиотеку. Знание общепризнанных подходов и практик, библиотек и фреймворков, вот что сегодня является признаком квалификации программиста.

Между тем, красота и волшебство программирования для многих (я уверен, что не одинок в этом) в полной мере раскрывается в решении сложных алгоритмических задач, так редко встречающихся в повседневной практике. И раз уж "гора не идет к Магомету", то Магомет придумает себе задачку самостоятельно!

Жизненный цикл JSF

среда, 14 марта 2012 г.


Что такое Unix way?

вторник, 28 февраля 2012 г.

Что такое "unix way"? Что кроется за этим словосочетанием? Почему идеология, рожденная десятилетия назад, до сих пор является актуальной и позволяет старикам юниксоидам козырять ей перед "оконным" молодняком? Эти вопросы беспокоили меня с первых дней моего знакомства с Linux. Пришла пора поделиться найденными ответами.

Статья состоит из двух частей: развлекательной - краткой истории Unix и изложения основ философии Unix, и практической. Практические примеры далеки от идеала, и призваны показать направление решения, а не предоставить готовый 100% ответ. В целом статья носит обзорный характер и не претендует на полноту освещения затронутых вопросов, что, впрочем, должно позволить не уснуть читателю до последнего абзаца. И так...

Http в Java. Часть вторая - HTTP.

пятница, 24 февраля 2012 г.
 В предыдущей статье, был поверхностно рассмотрен стек TCP/IP и способы его использования в java. Это очень важный фундамент, который позволит перейти к изучению непосредственно http.

HTTP (HyperText Transfer Protocol - протокол передачи гипертекста)честно следует своему названию, и заключается в спецификации обмена сообщениями определенного текстового формата. Клиент и сервер обмениваются текстовыми сообщениями состоящими из заголовка сообщения и его тела. В заголовке указывается необходимая для взаимодействия информация.

Http в java. Часть первая - TCP.

четверг, 16 февраля 2012 г.

Современные фреймворки достаточно хорошо абстрагированы от низкоуровневых деталей собственной реализации. С одной стороны это хорошо - упрощает нам жизнь, но с другой стороны не дает нам лишнего повода узнать фундаментальные вещи. Это справедливо для огромного количества вопросов и областей информационных технологий, но в этом цикле статей речь пойдет о протоколе http (часто скрываемом за JSP, JSF и др.) и способах его использования в Java.

Священная война за скобки в коде

четверг, 9 февраля 2012 г.
Когда я еще писал на C#, у меня выработалась привычка расставлять открывающие блок кода скобки на новой строке. Тогда иной подход, при котором скобка оставалась на той же строке, что и оператор, казался совершенно неудобным.

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

И тем не менее, информация о том, откуда вообще родились различные способы решения этого "фундаментального" вопроса, может оказаться интересной.

Наиболее полно эта тема раскрыта в книге Ричарда Хэзфилда "Искусство программирования на C". Да простит меня автор за копирование, но ниже я приведу выдержку из его работы, касающуюся способов расстановки скобок.

Пишем модульное приложение на .Net Framework

пятница, 27 января 2012 г.


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

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

Вперые опубликовано  на habrahabr.ru

Виды информационных угроз и способы борьбы с ними

среда, 11 января 2012 г.

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

Под катом приведена выдержка из курса Современные веб-технологии интернет университета Intuit с перечнем наиболее распространенных информационных уязвимостей, их описанием, примерами и способами борьбы.
Технологии Blogger.