Обновить
128K+

Java *

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

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

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

Время на прочтение3 мин
Охват и читатели54K
Это перевод статьи Джошуа Блоха «Extra, Extra — Read All About It: Nearly All Binary Searches and Mergesorts are Broken» 2006 года.

Я живо помню первую лекцию Джона Бентли в университете Карнеги-Меллон, на которой он попросил нас, свежеиспечённых аспирантов, написать функцию двоичного поиска. Он взял одно из решений и разобрал его на доске, и, разумеется, в нём оказалась ошибка, как и во многих других наших попытках. Этот случай стал для меня наглядной демонстрацией к его книге «Жемчужины программирования». Мораль в том, чтобы внимательно расставлять инварианты в программе.

И вот, теперь 2006 год. Я был потрясён, узнав, что программа двоичного поиска, корректность которой Бентли доказывал формально и тестами, содержит ошибку. Не подумайте, что я придираюсь; по правде сказать, такая ошибка вполне может ускользать от тестеров десятилетиями. Более того, двоичный поиск, который я написал для JDK, тоже был багнутым лет девять. И только сейчас, когда она сломала кому-то программу, о ней сообщили в Sun.
Читать дальше →

Краткий обзор Spring Security

Время на прочтение7 мин
Охват и читатели257K
Итак, дорогой хабраюзер, предлагаю тебе рассмотреть такие аспекты Spring Security как:

  • Ключевые объекты контекста Spring Security.
  • Процесс аутентификации в Spring Security.
  • Подключение собственно самого Spring Security к проекту.

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

Книга «Java. Новое поколение разработки»

Время на прочтение1 мин
Охват и читатели12K
Всем привет.
Вот и вышла из типографии книга «Java. Новое поколение разработки». Прошлый пост можно почитать здесь. Книга доступна в печатном и электронном виде. До 28-го ноября действует акция со скидкой 20%, при покупке книг из раздела JavaScript, JScript, DHTML. Чтобы получить скидку, при оформлении заказа введите код купона: 68db5a.



Аннотация:

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

Что Java 8 нам готовит

Время на прочтение4 мин
Охват и читатели58K
Пройдемся по новинкам и покодируем по-новому.

Итак, начнем по списку.

Допустим, имеется список.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);


Теперь вспомним, как мы итерировали в старые времена:
for (int i = 0; i < numbers.size(); i++){
 System.out.println(numbers.get(i));
}


Все здорово, но уж очень легко оступиться и поставить <= вместо < или начать с 1 вместо 0. В вышеприведенном коде мы полностью контролируем механику, мы держим в голове все движущие части. Это хорошо во многих случаях, и никто у нас этого не отобрал в Java 5, только добавили сахарку.
Читать дальше →

Xalan, Saxon и 8 ферзей

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

Сегодня я хочу рассказать об XSLT. Этот, весьма своеобразный, язык может оказаться очень полезным в тех случаях, когда требуется обработать XML-данные, сколь нибудь не тривиальным образом. Я расскажу о двух наиболее популярных (в среде Java-разработчиков) реализациях XSLT-процессора, подробно остановлюсь на вопросах их использования из Java-кода и попытаюсь сравнить их производительность. В качестве теста для сравнения производительности, я буду использовать широко известную задачу о расстановке 8-ми ферзей на шахматной доске.

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

Введение в Android NDK

Время на прочтение9 мин
Охват и читатели250K
Для разработки приложений под ОС Android, Google предоставляет два пакета разработки: SDK и NDK. Про SDK существует много статей, книжек, а так же хорошие guidelines от Google. Но про NDK даже сам Google мало что пишет. А из стоящих книг я бы выделил только одну, Cinar O. — Pro Android C++ with the NDK – 2012.

Эта статья ориентирована на тех, кто ещё не знаком (или мало знаком) с Android NDK и хотел бы укрепить свои знания. Внимание я уделю JNI, так как мне кажется начинать нужно именно с этого интерфейса. Так же, в конце рассмотрим небольшой пример с двумя функциями записи и чтения файла. Кто не любит много текста, тот может посмотреть видео версию.
Читать дальше →

О чём молчит Joker. Рассказ-история о конференции

Время на прочтение15 мин
Охват и читатели23K
15 октября славный город Санкт-Петербург посетил суперзлодей Вселенной Joker.
Нет, он никого не убил, и ни один Бэтмен не пострадал. Но его посещение, тем не менее, запомнится многим. Во-первых, это была премьера новой конференции по Java технологиям. Во-вторых, эта конференция удалась на славу, а значит, её ждёт большое будущее, а первая конференция – всегда история.

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

Знакомимся с Dependency Injection на примере Dagger

Время на прочтение7 мин
Охват и читатели69K
http://radiant--eclipse.deviantart.com/
В данной статье мы попытаемся разобраться с Dependency Injection в Android (и не только) на примере набирающей популярность open source библиотеки Dagger
И так, что же такое Dependency Injection? Согласно википедии, это design pattern, позволяющий динамически описывать зависимости в коде, разделяя бизнес-логику на более мелкие блоки. Это удобно в первую очередь тем, что впоследствии можно эти самые блоки подменять тестовыми, тем самым ограничивая зону тестирования.

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

Рассмотрим упрощенную (до псевдокода) версию Twitter клиента.
Далее

АД по имени JSMPP

Время на прочтение7 мин
Охват и читатели20K
Видимо в жизни каждого программиста наступает момент, когда ему становится необходимо научиться отправлять SMS-сообщения. Вчера такой момент наступил и у меня. Сразу скажу, что эта необходимость никак не связана с рекламными рассылками и прочим спамом. SMS-ки понадобилось рассылать в сугубо мирных целях, в рамках реакции на события, обнаруженные в процессе мониторинга оборудования.

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

В нашей компании давно и успешно используется собственная реализация SMPP-сервиса и мысль об использовании готового SMPP-клиента на Java показалась мне логичной. Отважно вбив в строку поиска google слова «java smpp client», я немедленно нашел нужную мне библиотеку. О том, что происходило дальше, рассказывает мой сегодняшний пост.
Читать дальше →

Проблемы с Java web start при обновлении до j7u45

Время на прочтение4 мин
Охват и читатели11K
Как можно догадаться из названия, пост будет посвящен вышедшему security обновлению джавы, которое наверняка сломает/сломало запуск вебстартового приложения. Всех не равнодушных — прошу под кат.

В нашей компании принята практика обновлять Java на всех серверах, как только выходят новые версии. Собственно, так мы и поступили в этот раз. Но что-то пошло не так, веб старт клиент перестал запускаться и приложение, без объявления войны, стало просто закрываться.
Засучив рукава, предстояло разобраться, что же стало причиной такого поведения.
Читать дальше →

Ciklum Kiev Java Saturday с гостями из Англии и необычные завершением программы презентаций

Время на прочтение2 мин
Охват и читатели3.9K
Интереснейшее событие ждет всех джавистов в рамках Ciklum Java Saturday, который состоится 23 ноября в киевском офисе компании Ciklum.

В чем же уникальность этого суботника? Помимо того, что вы сможете послушать опытных Java специалистов Украины и Англии, у вас будет уникальная возможность поучаствовать в необычной активности после презентаций от наших докладчиков.
image
Читать дальше →

Java и работа с iCalendar

Время на прочтение5 мин
Охват и читатели23K
Не так давно у меня возникла необходимость парсинга и последующего вывода нужной информации из iCalendar. После упорных поисков я наткнулся на библиотеку iCal4J. Присмотревшись к её функционалу, я понял — это то, что мне нужно. Давайте же попробуем её применить на практике.

Подготовка календаря

В Google Calendar я создал маленький календарь, состоящий из нескольких различных мероприятий длительностью от 30 минут до 6 часов. Затем я скачал календарь в формате iCal к себе на ноутбук. Если кто не знает — делается это так: заходим в настройки календаря Google и в разделе «Закрытый адрес календаря» жмём на зеленую кнопочку «ICAL». Всё, календарь загружен на устройство.
Читать дальше →

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

Shortest Common Superstring Problem

Время на прочтение9 мин
Охват и читатели13K
Проблема кратчайшей общей надстроки формулируется следующим образом: найти кратчайшую строку, такую, что каждая строка из заданного набора являлась бы её подстрокой. Эта проблема имеет место как в биоинформатике (задача сборки генома в общем случае) так и в сжатии данных (вместо данных хранить их надстроку и последовательность пар, вида (индекс вхождения, длина)).

Когда я искал в сети информацию по этой проблеме и её решению на русском языке — находилась лишь пара постов про биоинформатике, где вскользь упоминаются эти слова. Кода (кроме жадного алгоритма), конечно же, тоже не было. Разобравшись в проблеме, этот факт сподвиг на статью здесь.

Осторожно, 4 мегабайта!
Читать дальше →

Простой способ добавить геолокацию в свой проект для Android

Время на прочтение3 мин
Охват и читатели62K
Долго я прочёсывал интернет в поисках простого решения, как мне в проект добавить 1 только класс и больше не беспокоиться о проблемах геолокации.
Критерии были такие:
1) решить всё в 1 классе, как можно меньше используя внешний код.
2) у пользователя должна быть всегда под рукой 1 static переменная в которой указанно его местоположение и больше ни о чём он знать не должен.

Большинство постов не отвечало на поставленный вопрос: конечно сначала нужно обратиться к сервису, потом нужно установить listner, потом вы можете посмотреть на трёхстраничный краткий пример как это делать.
В итоге я написал свой класс, с которым и хочу вас познакомить: он прост в использовании и с ним сможет справиться любой: просто добавьте его в проект и будет вам счастье.
Читать дальше →

Java навсегда! 12 причин длительного доминирования Java

Время на прочтение9 мин
Охват и читатели145K
Java foreverЛегко забыть значимость технологии, как только она пронесется кометой через коллективное сознание и погаснет огненной смертью за горизонтом. К примеру, Cobol — когда-то этот язык был культовым для целой эпохи, а сейчас его можно сравнить разве что с протухшей рыбой. В наши дни любой хипстер-программист вам отчеканит, что Cobol – это полный отстой, старый и бесполезный язык. Java может стать следующей жертвой «актуальных» суждений.

Пик продаж книг по Java – далеко в прошлом. Матерые Java-утилиты уже не достаточно сексуальны для обложек журналов. Java уже 19 лет, а прогрессивные разработчики увлечены такими моднейшими и актуальнейшими технологиями как Node.js, Objective-C, Dart, Go и т.д., удивляясь: «Java? Этот артефакт эпохи Web 1.0 еще жив?»

Беглый поиск на Dice.com показывает, что работы на Java — навалом. Если для iOS около — 2500 предложений, для Java — более 17000. Конечно, нельзя всецело полагаться на эти цифры. Но тот факт, что на Dice.com рынок работы на Java потенциально в семь раз больше, чем для моднейшей iOS, говорит о том, «старина Java» чувствует себя довольно таки неплохо.
Читать дальше →

FindBugs помогает узнать Java лучше

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

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

В этом посте я расскажу о некоторых тонкостях Java, о которых я узнал в результате использования статического анализатора FindBugs. Возможно, какие-то вещи окажутся неожиданными и для вас. Важно, что все примеры не умозрительны, а основаны на реальном коде.

Тернарный оператор ?:


Казалось бы, нет ничего проще тернарного оператора, но у него есть свои подводные камни. Я считал, что нет принципиальной разницы между конструкциями
Type var = condition ? valTrue : valFalse;
и
Type var;
if(condition)
  var = valTrue;
else
  var = valFalse;

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

Импортируем OpenStreetMap в MySQL

Время на прочтение25 мин
Охват и читатели9.5K
Однажды мне потребовалось узнать номера улиц и домов Минска. Каково же было мое разочарование, когда я узнал, что полных данных нигде нет, и что делать если появляются новые улицы и дома. Вот тут и пришел на выход OpenStreetMap с открытым кодом и постоянными обновлениями. Беда в том, что карты представляют собой xml документ, объёмом аж целых 2 Гб и информация о домах представлена в таком виде:

<way id="25324320" >
  <nd ref="275904968"/>
  <nd ref="275904882"/>
  <nd ref="275904881"/>
  <nd ref="275904969"/>
  <nd ref="275904968"/>
  <tag k="addr:housenumber" v="17"/>
  <tag k="addr:postcode" v="220013"/>
  <tag k="addr:street" v="улица Якуба Коласа"/>
  <tag k="building" v="yes"/>
 </way>  

Обрабатывать 1.5 Гб данных проще, когда данные упорядочены а не представлены в виде строк. Так мной было принято решения конвертировать данные в БД. Сказано – сделано, в качестве рабочего инструмента выбраны: Eclipse(Java SE) и джентельменски набор денвера.
Читать дальше →

Как подписать JAVA апплет

Время на прочтение3 мин
Охват и читатели29K
Привет, любимый читатель.
Сегодня ты узнаешь как подписать JAVA апплет. Для начала скажу, что JAVA апплеты имеют ограниченную функциональность, пока они не подписаны. Например, неподписанные апплеты не могут:
  • взаимодействовать с локальной файловой системой клиента;
  • устанавливать сетевые соединения с другими серверами;
  • взаимодействовать с буфером обмена клиента;
  • некоторые другие.

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

Потеря точности из Double во Float или «Куда пропадали копейки?»

Время на прочтение7 мин
Охват и читатели57K
Преобразование чисел из одного типа в другой обычно ведется таким образом, чтобы не потерять лишних чисел, т.е. из меньшего типа к более вместительному. Но что, если предыдущий разрабочик использовал конвертацию из Double во Float и стали пропадать копейки в отчетах?
В статье приводится изучение конвертации плавающих чисел в Java:
    99999999.33333333 -> 100000000.0000000
    98888888.33333333 ->  98888888.0000000
     2974815.78000000 ->   2974815.7500000

Давайте разберемся, к чему приводит такое преобразование и почему все происходит именно так. Ведь казалось бы, раз используемые в проекте числа далеки от максимальных значений типов float и double, то конвертация его из первого во второй не должна повлечь за собой отрицательных последствий в большинстве случаев.
Читать дальше →