Обновить
512K+

Java *

Объектно-ориентированный язык программирования

398,15
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

О том как я имя файла из С++ в Java передавал

Время на прочтение3 мин
Охват и читатели1.8K
image
В кроссплатформенных приложениях чего только не встретишь. Или напишешь. Вот, намедни родили против шерсти очередного ежика наступили на заботливо разложенных грабель, на сей раз под маком.

Читать дальше →

Путевые заметки, или вкус кофе для слонов

Время на прочтение4 мин
Охват и читатели7.8K


Уже догадались, о чем будет статья?



Третий год занимаюсь разработкой крупной системы на Java с использованием СУБД PostgreSQL. Система десктопная, клиент-серверная. Опытного Senior-Java-Developer-а у нас нет, поэтому приходится думать самим. Думать, строить, ломать, строить заново, опять ломать…
За время работы накопился некоторый опыт как по организации непосредственно работы с БД, так и по взаимоувязыванию этих платформ, о котором и хочу рассказать в этой статье.

Опишу выборочно некоторые вопросы, с которыми мы столкнулись при разработке и которые решили.
Читать дальше →

Как я вставлял Java 7 в работающее приложение, и что пришлось изобрести для С runtime

Время на прочтение3 мин
Охват и читатели2.8K
image

Однажды, в студеную зимнюю пору, в одно старое приложение на С++, успешно работавшее до этого годами, пришлось вставить новый Java runtime 7 вместо отлично работавшего Java 6. Ничто не предвещало, и вдруг.

Код в общем-то очевиден и прост — немного JNI, и вот он — больной зуб. Приведу код только для Windows, т.к. чудеса эквилибристики под маком не потребовались.

Читать дальше →

Физика Robocode

Время на прочтение5 мин
Охват и читатели14K
Данный материал изначально был подготовлен в качестве раздела статьи “Первые шаги в Robocode”, но я решил вынести его, т.к. он значительно увеличивал размер и без того большой первоначальной статьи и не является базовым и необходимым для осуществления первого шага. Если вы сразу заинтересовались вторым шагом или постепенно доросли до него, то прошу под кат.
Читать дальше →

Первые шаги в Robocode

Время на прочтение10 мин
Охват и читатели40K
Я пишу эту статью по просьбам в комментариях к статье “Как я стал чемпионом Robocode” и продолжая начатое в ней дело по привлечению внимания к Robocode русскоговорящих разработчиков. Robocode — это игра для программистов, в которой задача заключается в разработке системы управления танком. Для затравки приведу несколько роликов, чтобы показать о чём вообще пойдёт разговор:


Читать дальше →

ZooKeeper или пишем сервис распределенных блокировок

Время на прочтение10 мин
Охват и читатели71K
disclaimer Так получилось, что последний месяц я разбираюсь с ZooKeeper, и у меня возникло желание систематизировать то, что я узнал, собственно пост об этом, а не о сервисе блокировок, как можно было подумать исходя из названия. Поехали!

При переходе от многопоточного программирования к программированию распределенных систем многие стандартные техники перестают работать. Одной из таких техник являются блокировки (synchronized), так как область их действия ограничена одним процессом, следовательно, они не только не работают на разных узлах распределенной системы, но так же не между разными экземплярами приложения на одной машине; получается, что нужен отдельный механизм для блокировок.

От распределенного сервиса блокировок разумно требовать:
  1. работоспособность в условиях моргания сети (первое правило распределенных систем — никому не говорить о распределенных системах сеть ненадежна)
  2. отсутствие единой точки отказа

Создать подобный сервис нам поможет ZooKeeper

image В википедии написано, что ZooKeeper — распределенный сервис конфигурирования и синхронизации, не знаю как вам, но мне данное определение мало что раскрывает. Оглядываясь на свой опыт, могу дать альтернативное определение ZooKeeper, это распределенное key/value хранилище со следующими свойствами:
  • пространство ключей образует дерево (иерархию подобную файловой системе)
  • значения могут содержаться в любом узле иерархии, а не только в листьях (как если бы файлы одновременно были бы и каталогами), узел иерархии называется znode
  • между клиентом и сервером двунаправленная связь, следовательно, клиент может подписываться как изменение конкретного значения или части иерархии
  • возможно создать временную пару ключ/значение, которая существует, пока клиент её создавший подключен к кластеру
  • все данные должны помещаться в память
  • устойчивость к смерти некритического кол-ва узлов кластера

Под катом код, данные по производительности и куча wtf-ов

Как я стал чемпионом Robocode

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели5.5K
Я — Jdev, автор Robocode-бота Tomcat, который в ноябре/декабре 2011 года был Королём Премьер Лиги общего зачёта Robocode (пруф) без единого поражения, сейчас занимает 3-е место из 911 в процентном зачёте и является героем моего повествования. В этой статье я рассказываю о своём шестилетнем пути к победе.
Читать дальше →

Тонны мусора и минимум полезной работы или скроллинг в Idea

Время на прочтение3 мин
Охват и читатели3.8K
Совсем недавно, перейдя на новый проект, я решил для разнообразия также перейти с Eclipse на Idea. С идеей у меня уже был опыт еще с 6-й версии, она мне нравилась, но проблем у нее было достаточно много. Тогда я отказался от нее в виду периодических глюков при долгой работе. Увидев, что уже на дворе 11-я версия я обрадовался и решил опять попытать счастья, так как по интерфейсу идея для меня гораздо приятней…

Около месяца назад заметил, что при активной разработке, когда выделенные под кучу 768мб памяти заполнены под 80%, любое действие, вроде движения мышкой, переключения фокуса, просто прокрутка колесом мышки или непосредственно скроллом в окне вызывает большое потребление памяти и оставшиеся 20% памяти съедаются за несколько секунд работы. После чего, естественно, про комфортную работу можно забыть и приходится перегружать среду в виду постоянного срабатывания сборщика. Сегодня эта ситуация меня окончательно достала и я решил узнать — в чем же собственно проблема?

Интуитивно я понимал, что вероятней всего каждое движение мышки и любое действие вроде прокрутки генерирует определенные события, которые потом обрабатываются, но ТАК МНОГО этих событий я не ожидал. Для затравки — 2 скриншота потребления памяти при движении мыши в окне редактора и скроллинге внутри открытого класса на 1000 строк:

Движение: mouse move
Скроллинг: scrolling

Обычная прокрутка в окне редактирования кода в пике съедает почти 100мб памяти за несколько секунд… Любое движение мыши генерирует объектов на десятки мегабайт… Единственный позитивный момент во всем этом, что все эти объекты потом собираются.

Читать дальше →

OSGi in banking environment. Ciklum Speakers' Corner в Киеве

Время на прочтение1 мин
Охват и читатели2.7K
17 Июля город Киев. Speakers' Corner: «OSGI in banking environment»


Приглашаем неравнодушных Java разработчиков обсудить возможности OSGi (Open Services Gateway Initiative) — спецификация динамической плагинной (модульной) шины для создания многофункциональных Java десктоп-приложений и энтерпрайзных систем.

Наш гость из Женевы, Java специалист с 15-летним опытом Fulco Houkes расскажет об использовании OSGi для банковской инфраструктуры. Внимание! Доклад и обсуждение будут проходить на английском языке без перевода!

Темы к обсуждению:
• Banking challenges
• An elegant solution: OSGI
• What is OSGI?
• OSGI best practices & pitfalls
Читать дальше →

Сохранение контактной информации в Google Contacts

Время на прочтение8 мин
Охват и читатели6.2K
Добрый день, коллеги!

Как я и обещал в своей предыдущей статье, хочу поделится с вами информацией касательно использования Google Contacts API. Кому интересно узнать, как вызывать Google Contacts API из Java на Google Apps Engine — добро пожаловать под кат.
Читать дальше →

Pейтинг java frameworks составленный самими разработчиками

Время на прочтение1 мин
Охват и читатели13K
Привет, всем.

Вот набрел на интересную ссылку — http://devrates.com/project/search?query=%5Bjava%5D



Это рейтинг java frameworks составленный самими разработчиками…

В принципе (по моим личным ощущениям и предпочтениям) — похоже на правду. Можно зарегистрироваться и оставить свое мнение.

Интеграционные тесты с Maven, JUnit и Spring

Время на прочтение7 мин
Охват и читатели84K
Юнит тесты это штука хорошая, но, на мой взгляд, полагаться лишь на них нельзя. Иногда очень важно проверить как работают несколько классов, а иногда и слоёв приложения вместе.

У нас приложение активно использует Спринг, а значит и такие интеграционные тесты должны работать с контекстом спринга.

Часто подобные тесты могут занимать много времени, даже если использовать in-memory базу данных (я, кстати проверял почему — у нас много JPA entities с множеством свойств в каждом и инициализация Hibernate, имено она, занимает десятки секунд!)

Значит нам надо сделать так, чтобы по умолчанию эти тесты, в отличие от обычных юнит тестов, не исполнялись во время билда.

Так что план такой:
1. Пишем сервисы, разбитые на два слоя приложения
2. Соединим их Спрингом
3. Напишем тест пользуясь JUnit для взаимодействия этих сервисов (настоящих, без всяких mock)
4. Делаем так, чтобы этот тест не бежал по умолчанию во время билда
5. Profit!
Читать дальше →

Java 8 Lambda vs LambdaJ vs Guava vs Iterative approach

Время на прочтение4 мин
Охват и читатели12K
В середине 2013 года выходит Java 8 с реализацией лямбда-выражений. Лямбда-выражения предоставляют широкие возможности для применения функционального стиля программирования. Правда функциональный стиль можно использовать уже сегодня в JDK 7, 6 или 5 с помощью библиотек LambdaJ и Guava.
Iterative Lambdaj JDK 8 lambda Guava
Print all brands 79 472* 113 79
Select all sales of a Ferrari 25 146 44 31
Find buys of youngest person 1,209 1,775 1,242 1,218
Find most costly sale 8 123 55 72
Sum costs where both are males 23 973* 40 45
Age of youngest who bought for > 50,000 1,521 2,576* 1,560 1,511
Sort sales by cost 350 1,187 473 453
Extract cars original cost 29 61 31 31
Index cars by brand 57 70 89 415
Group sales by buyers and sellers 2,586 3,748* 2,862 1,601
Find most bought car 744 1,023* CRASH 1,435
подробнее о производительности

Ближайшие события

Java Interceptors (в EJB 3.0)

Время на прочтение5 мин
Охват и читатели44K
Представьте себе, что вы уже написали немалую часть кода приложения, и тут выясняется, что вам необходимо добавить логирование на вызов большого числа методов, или необходимо на некоторые схожие методы добавить дополнительную валидацию входных данных.
Вы можете просто переписать нужные участки кода, а можете воспользоваться появившемся в EJB 3.0 механизмом интерсепторов (interceptors).

Если интересны подробности и небольшой пример реализации прошу под кат.

Читать дальше →

Пишем плагин для Netbeans. Часть первая

Время на прочтение7 мин
Охват и читатели8K
Представьте ситуацию: вы программируете в среде разработки и вам необходимо кому-то отправить небольшой кусок кода из редактора. Вы выделяете нужный кусок, копируете его, открываете браузер, заходите на pastebin, вставляете код, копируете ссылку, а затем отправляете её адресату. А как насчет того, чтобы сократить эти действия вдвое?
Для Netbeans есть плагин PB4NB, но он не работает из-за смены API в pastebin. Поэтому мы напишем свой собственный плагин, который сами же настроим по своему вкусу, а заодно и немного разберёмся с платформой Netbeans. Заинтересованы? Добро пожаловать под кат.
Читать дальше →

Logy — логгер с человеческим лицом

Время на прочтение4 мин
Охват и читатели3.2K
Некоторое время назад мне пришла в голову идея сделать логирование в Java более дружелюбным, простым и в тоже время достаточно гибким в настройке. Такие требования справедливы пожалуй, в средних и малых проекта, где можно обойтись без громоздкого log4j. Буквально за неделю, идея переросла в простенькую Java библиотеку с ни менее простым названием — logy.

Использование:
import static logy.Logy.*;

public class Test {
  public void test() {
    String s[] = {"a", "b"};
    warn("Can't find", quote(upper("c")), "in", group(quote(upper(scalar(s)))));
  }
}

Вывод:
29.06.2012 1:19:25 Test.test [WARN] :: Can't find "C" in ["A", "B"]

Как по мне, выглядит очень читабельно, благодаря синтаксическому сахару, DSL-like API и динамическому определению параметров логирования в момент вызова (читай без дополнительных полей public static final Logger logger = ... в классе).
Но и это еще не все.

Вышел GWT 2.5.0.RC1

Время на прочтение2 мин
Охват и читатели4.7K
Пару дней назад вышла очередная и долгожданная версия фреймворка для разработки веб-приложений — GWT в версии 2.5.0.RC1. Давайте посмотрим, что же нового мы увидим в релизе 2.5.
Читать дальше →

Встречайте IntelliJ IDEA 12 Leda Preview!

Время на прочтение1 мин
Охват и читатели20K
Хорошая новость для тех, кто ждал новые интересные функции в IntelliJ IDEA. Мы наконец-то рады сообщить, что Early Access Program для IntelliJ IDEA 12 официально открыта. Кодовое название нового релиза – Leda. Итак, встречайте IntelliJ IDEA 12 Leda!



Чтобы попробовать IntelliJ IDEA Leda, нужно скачать EAP дистрибутив для вашей платформы.
Подробнее о новых функциях IntelliJ IDEA 12

Выпуск №77 — The Art Of Programming [ Java Learning ] JRebel

Время на прочтение1 мин
Охват и читатели2.8K

Code Review Open Source проектов

Время на прочтение1 мин
Охват и читатели2.4K
Анонсирую собственный эксперимент — сборник обзоров исходного кода Open Source проектов. В первом приближении, проекты ограничиваются JVM платформой. Формат обзоров — цикл сухих статей, объединенных рассматриваемым проектом. В обзор попадают архитектурные особенности, ошибки разработчиков и другие интересные детали реализации.
Читать дальше →