Рубрика «java» - 223

Ключевое слово assert (проверка) появилось в Java 1.4. Мне кажется, многие до сих пор стараются его избегать, или заворачивать в утилитные статические методы с возможностью быстро поменять assert condition : message; на

if (!condition)
    throw new AssetionError(message);

по всему коду. Кто-то боится, что проверки недостаточно надежные, и если кто-то забудет их включить, какие-то баги останутся незамеченными. Кто-то, наоборот, маниакально думает о производительности: если кто-то включит проверки для подсистемы/библиотеки, написанной ребятами из первой группы, и забудет исключить пакеты или классы «производительной» библиотеки, исполнение будет замедленно бесполезными вычислениями.

Хотя, по-моему, ничего страшного в проверках нет, их можно и нужно расставлять по коду как можно щедрее. Во-первых, как я уже упомянул (но для кого-то это может оказаться в новинку), проверки можно гибко настраивать (включать/отключать в пакетах и отдельных классах) как из командной строки при запуске JVM, так и программно (через ClassLoader), так что если вы вдруг захотите включить проверки в одной системе и выключить — в другой, это уж точно решаемая проблема.

Во-вторых, иногда хочется проверять не тривиальные условия вроде какая-то булева переменная == false или true, а поддерживать некоторое проверочное состояние внутри класса и сверяться с ним в методах. С помощью трюка с assert можно добиться этого практически бесплатно при исполнении с отключенными проверками.
Читать полностью »

В Java для введения порядка среди определённых объектов можно написать компаратор — класс, содержащий функцию compare, которая сравнивает два объекта. Альтернативой компаратору является естественный порядок объектов: объект реализует интерфейс Comparable, который содержит метод compareTo, позволяющий сравнить этот объект с другим. Сравнивающая функция должна вернуть 0, если объекты равны, отрицательное число (обычно -1), если первый объект меньше второго, и положительное число (обычно 1), если первый больше. Обычно реализация такой функции не представляет сложностей, но имеется один случай, о котором многие забывают.

Сравнение используется различными алгоритмами от сортировки и двоичного поиска до поддержания порядка в сортированных коллекциях вроде TreeMap. Эти алгоритмы завязаны на три важных свойства сравнивающей функции: рефлексивность (сравнение элемента с самим собой всегда даёт 0), антисимметричность (сравнение A с B и B с A должны дать разный знак) и транзитивность (если сравнение A с B и B с C выдаёт одинаковый знак, то и сравнение A с C должно выдать такой же). Если сравнивающая функция не удовлетворяет этим свойствам, алгоритм может выдать совершенно непредсказуемый результат. Причём скорее всего вы не получите никакого исключения, просто результат будет неверный.

Как обнаружилось, несоблюдение этих свойств — не такая уж редкая ситуация. Проблема возникает при сравнении вещественных чисел — float или double.
Читать полностью »

Для клонирования объекта в Java можно пользоваться тремя способами:

  1. Переопределение метода clone() и реализация интерфейса Cloneable();
  2. Использование конструктора копирования;
  3. Использовать для клонирования механизм сериализации

Теперь по порядку. Первый способ подразумевает, что вы будете использовать механизм так называемого «поверхностного клонирования» и сами позаботитесь о клонировании полей-объектов. Метод clone() в родительском классе Object является protected, поэтому требуется переопределение его с объявлением как public. Он возвращает экземпляр объекта с копированными полями-примитивами и ссылками. И получается что у оригинала и его клона поля-ссылки указывают на одни и те же объекты. Пример далее показывает, как одновременно меняется поле у оригинального объекта и клона.
Читать полностью »

Вступление

В прошлой статье я рассказал читателям краткую историю десяти лет развития проекта Openbravo POS. В течении 7 лет я принимал активное участие в нём и совместно с другими участниками разрабатывал систему управления торговой точкой с открытым исходным кодом. Но в этом году я решил перенести все свои накопленные наработки в самостоятельный проект nordpos.mobi и развивать их уже в рамках собственного форка, созданного на базе открытого исходного кода Openbravo POS.

NORD POS. История о том, зачем мне нужен был ещё один форк Openbravo POS - 1

Истоки

Ключевой причиной остановки развития Openbravo POS, стал фактический уход из проекта её основателя Эдрина Ромера, он полностью переключился на разработку коммерческой версии Openbravo Web POS и с 2010 года к исходному коду оригинальной версии больше не прикасался. По этому больших надежд на возрождение проекта я не питал, а необходимость в развитие приложения у меня была.
Читать полностью »

Так уж повелось, что каждый релиз лингво-независимой библиотеки обработки естественных текстов AIF сопровождается заметкой о том, что было сделано и как   все работает. Подобные тексты о предыдущих двух релизах Alpha1 и Alpha2 можно найти вот тут и тут. Не исключением из этого правила стал и текущей релиз Alpha3, в котором появилась возможность строить словарь токенов для входного текста. О том, как все работает под капотом и как это можно использовать в своём проекте и пойдёт сегодня речь.
Читать полностью »

image

Здравствуй! Хочу рассказать об одной библиотеке, которую я разработал в рамках моего прошлого проекта и так вышло, что она попала в OpenSource.
Читать полностью »

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

Сразу – вводная, которую я сама себе нарисовала, еще планируя выход на рынок. Во-первых, на раскрутку приложения я не буду тратить ни копейки денег. Не потому что их нет (хотя…), а пока из принципа – чтобы собрать максимальный урожай с бесплатных вариантов. Во-вторых, ограничиться только установками через Гуглоплей. И сразу же спойлер – первое пока удается (потрачено 0 р. 00 коп.), второе – уже нет.

И еще один спойлер — под катом анализ конверсии до и после привлечения аудитории торрентофилов…

Первый месяц раскрутки бесплатного неигрового приложения: грабли, шишки, удачи, выводы (Хабрахабр)
Читать полностью »

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

Анонс новых сервисов и увеличенной производительности облачной платформы Azure - 1

Среди прочего для платформы Azure были представлены следующие нововведения:

  • Хранилище Premium Storage. Новое высокоскоростное хранилище данных в облаке;
  • Выпуск RemoteApp. Выход в коммерческую эксплуатацию сервиса RemoteApp для организации доступа к десктопным приложениям на любой мобильной платформе;
  • Обновление SQL Database. Новые возможности сервиса облачной СУБД;
  • Новые функции Media Services. Выход в коммерческую эксплуатацию функции организации живых видео-трансляций Live Media Streaming;
  • Обновление Azure Search. Крупное обновление облачного поиска-как-сервиса Azure Search;
  • Новые функции DocumentDB. Новые возможности NoSQL-базы данных оптимизированной для JSON в облаке, новые инструменты для Java-разработчиков;
  • Выпуск Site Recovery. Выход в коммерческую эксплуатацию сервиса организации катастрофоустойчивости для среднего бизнеса и офисов.

Рассмотрим все анонсы по порядку,
Читать полностью »

Прагматичное интеграционное тестирование может повысить вашу производительность и гарантировать развертывание JavaEE-приложения.

Адам Бин (Германия) – консультант, тренер, архитектор, член экспертной группы Java EE 6 и 7, EJB 3.X, JAX-RS, и JPA 2.X JSRs. Java Champion, Top Java Ambassador 2012 и JavaOne Rock Star 2009, 2011, 2012 и 2013 гг. Автор книг «Real World Java EE Patterns–Rethinking Best Practices» и «Real World Java EE Night Hacks–Dissecting the Business Tier».

Предлагаем вам ознакомиться с переводом статьи Адама «Integration Testing for Java EE»
Читать полностью »

В силу своей профессии я постоянно общаюсь с клиентами. Более 50% моих клиентов предпочитают общаться при помощи Skype. (к моему великому сожалению)

Skype для Windows работает более-менее нормально. Но недавно у меня возникла необходимость отлучаться от компьютера в рабочее время. И тогда я решил оставаться с клиентами на связи, поставив себе официальное приложения Skype для Android. (у меня Samsung Galaxy S3 mini)

Через некоторое время после установки я начал замечать, что Skype для Android работает как-то не нормально.

Тогда я решил поставить эксперимент.

Эксперимент

Я выключил свой компьютер и оставил Skype работающим только на телефоне. После этого я попросил своего друга добавиться ко мне в контактный лист.

Друг добавился, однако никакого сообщения на Android об этом не появилось! Я подождал 10 минут, никаких оповещений от Skype на Android так и не пришло. Тогда я перезапустил Skype, и оповещение появилось только после перезапуска!

Я добавил своего друга в контакт-лист и попросил слать мне сообщения. С доставкой сообщений возникли точно такие же проблемы: сообщения нормально доставлялись только после перезапуска Skype. (не всегда, но достаточно часто, особенно если некоторое время не вести диалог)

Эксперимент оказался воспроизводимым. Вывод из эксперимента: skype на моем android-телефоне не исполняет своих основных функций и не пригоден для работы.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js