Обновить
512K+

Java *

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

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

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

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

Вступление


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



Истоки


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

Построение словаря текста на примере NLP библиотеки AIF

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

JMSpy — шпион за вызовами методов

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

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

Первый месяц раскрутки бесплатного неигрового приложения: грабли, шишки, удачи, выводы

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

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

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

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

Skype для Android не работает! Как я с этим справился?

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

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

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

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

Тестирование GWT приложений архитектуры MVP

Время на прочтение19 мин
Охват и читатели11K
Добрый день!

В этой статье я рассмотрю unit/integration тестирование в GWT с использованием UI компонентов GWT и GXT и MVP (с Passive View) архитектуры для разделения логики и внешнего вида приложения.
GWT и GXT здесь выделены не случайно — Google разработал несколько framework'ов, которые облегчают поддержку паттерна MVP (точнее, более общее — разделение логики и представления) в GWT. Это Activity and Place для разделения логики приложения на модули, GWT Editor для автоматического мапинга POJO объектов на widget, UiBinding для декларативного описания интерфейса.
Всё это поддерживается ещё и UI framework'ом GXT. Т.ч. по сути не будет большой разницы в использовании UI компонентов GWT или GXT.

В результате получим легко тестируемое приложение без поднятия тяжёлого framework'а GWT.
Читать дальше →

Домашняя бухгалтерия на платформе CUBA. Часть 2

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


Это продолжение статьи об устройстве небольшого приложения, созданного на платформе CUBA. Приложение представляет собой систему учета домашних финансов и создавалось с двоякой целью: во-первых, собственно для учета моих финансов, а во-вторых, чтобы на простом примере проиллюстрировать возможности платформы.

В первой части я рассказал об основных частях приложения: модели данных, бизнес-логике среднего слоя и экранах, созданных на технологии Generic UI платформы. Во второй части, как и обещал, расскажу о том, как сменить тему Generic UI, как изменить поведение визуального компонента, и опишу устройство дополнительного UI для мобильных устройств, написанного на JavaScript.

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

Рассказ о том, как я с помощью логов нашел «пожирателя» памяти

Время на прочтение2 мин
Охват и читатели4.5K
Хочу поделиться простым, но, на мой взгляд, интересным способом поиска мест порождения пожирателей памяти при использовании минимального набора инструментов, которые всегда доступны под рукой – логи и jVisualVM.

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

Consulo Beta продолжится в 2015 году

Время на прочтение2 мин
Охват и читатели11K
Для тех кто пропустил мои посты:
Consulo — это форк IntelliJ IDEA Community Edition, который имеет поддержку .NET(C# на текущий момент, и на этот сектор пока идет большой акцент), Java, Javascript(NodeJS).

Здравствуй Хабр. В моих предыдущих постах (тык, тык), я показал хорошие возможности плагина C#, да и сама платформа вполне стабильно работает. Можно было выйти в реализ, но — это не только написать код. Нужен как минимум сайт, что бы не отдавать Night Builds пользователям, но увы — имею ограниченные возможности.

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

Контроль диапазонов целых чисел в FindBugs

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

FindBugs — это статический анализатор кода для Java с открытым исходным кодом (под LGPL). Он содержит множество детекторов, которые определяют те или иные проблемы в коде. С недавних пор я являюсь участником проекта и пишу для него новые детекторы. Об одном из них я и расскажу в этой статье. Также мы посмотрим примеры багов, найденных в реальных проектах.
Читать дальше →

Официальный релиз JetBrains Upsource 1.0: просмотр и рецензирование кода

Время на прочтение4 мин
Охват и читатели23K
Возможно, вы уже наслышаны, а если нет, то самое время узнать, что на днях мы выпустили первый официальный релиз Upsource.

Что такое Upsource?


Upsource — это инструмент для просмотра VCS-репозиториев, навигации по ним, а также для обсуждения и рецензирования кода (code review). Upsource предназначен для установки на собственном сервере компании и умеет работать с репозиториями Git, Mercurial, Subversion и Perforce.

В Java-проектах Upsource дополнительно осуществляет анализ кода аналогично тому, как это делает IntelliJ IDEA, а также предлагает знакомые по IDE функции Find Usages, Go to Declaration и Type Hierarchy.

Если помните, в августе мы анонсировали программу раннего доступа к Upsource, ну а сейчас дожили до релиза. Особо стоит отметить, что перед релизом мы обстоятельно подумали о лицензировании и ценах, и в итоге пришли к тому, что лицензия для небольших команд — до 10 пользователей (8 обычных пользователей, 1 гость и 1 администратор) — будет совершенно бесплатна. Для более крупных команд предлагается ряд коммерческих лицензий от 25 пользователей.

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

Предпосвящение десятилетию Openbravo POS

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

Вступление


В январе 2015 года исполняется 10 лет приложению Openbravo POS. За эти годы Openbravo POS(включая форки) стало лидером в мире СПО для автоматизации розничной торговли (POS, Point of Sale – торговая точка или более конкретно, рабочее место кассира). Данная статья предварительный итог того, что удалось и не удалось реализовать в проекте Openbravo POS за прошедшие 10 лет.

История имени



Отцом основателем, бессменным руководителем и практически единоличным коммитером проекта был Эдриан Ромеро из Испании. У проекта изначальное название с 2005 по 2007 год было Tina POS, но в августе 2007 года возник конфликт с этой торговой маркой и пришлось переименовать проект в Libre POS. В отличии от первого, второе название не продержалось и пол года, так как Эдриан перешёл работать в Openbravo и первая часть названия была «забрендирована», оставив от старого только «POS» на конце, что подчёркивало с этого момента принадлежность проекта к экосистеме данной ERP-системы в качестве дополнения в сфере розничной торговли. Также в феврале 2008 года вышла и первая версия Openbravo POS сразу за номером 2.00.
Читать дальше →

Как растаращить class-файл

Время на прочтение4 мин
Охват и читатели45K
Обычно при компиляции Java-файла получаются .class-файлы примерно того же размера, что и исходник. Меня заинтересовало, можно ли по небольшому исходнику сделать .class-файл, который больше, сильно больше исходника.

Можно поискать какие-то короткие конструкции языка, которые компилируются в длинные цепочки байткода, но линейный прирост меня не устраивал. Я сразу подумал про компиляцию finally-блоков: про неё уже писали на Хабре. Если вкратце, то для каждого finally-блока при непустом try-блоке создаётся минимум два варианта в байткоде: для случая нормального завершения try-блока и для случая завершения с исключением. В последнем случае исключение сохраняется в новую локальную переменную, выполняется код finally, затем исключение достаётся из локальной переменной и перебрасывается. А что если внутри finally снова разместить try-finally и так далее? Результат превзошёл все ожидания.
Читать дальше →

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

ASH Viewer

Время на прочтение5 мин
Охват и читатели26K
Предыстория (2008 г.)

По работе часто приходилось разбираться с производительностью серверов БД Oracle. После выхода Oracle 10g задача по мониторингу и диагностике проблем с производительностью значительно упростилась – с помощью истории активных сессий (Active Session History, ASH) стало возможно узнать, что происходило с БД в прошлом, что творится на сервере в данный момент, и даже прогнозировать, что будет происходить с нагрузкой в будущем.

Но, во-первых, процесс миграции на новую версию достаточно длительный, и некоторые заказчики продолжали использовать старые версии. А во-вторых, средства визуализации истории активных сессий от Oracle, которые имелись в наличии:
  • Требовали некоторых телодвижений по их установке и настройке – это Oracle Enterprise Manager Console (DB Console) или Oracle Enterprise Manager Grid Control (сейчас Oracle Enterprise Manager Cloud Control). DB Console из моей (и не только) практики требовал для установки применения очень сильных админских заклятий. Также в целях экономии ресурсов не все хотят ставить на сервера БД дополнительные сервисы или разворачивать на своей площадке отдельную инфраструктуру для мониторинга;
  • Обладали рядом архитектурных недостатков. К примеру, в случае зависания сервера БД доступ к информации из истории активных сессий посредством Oracle Enterprise Manager Console становился невозможным, и оперативно выяснить, что «что-то пошло не так» (с) было практически нереально;
  • Отсутствовала функциональность в части сохранения данных мониторинга и последующего его анализа на своей площадке.

Из сторонних бесплатных средств, похожая функциональность была реализована в утилите ASHMON за авторством Kyle Hailey. Но функционал был только для просмотра, и работала она под одну платформу – Windows.

В общем, после рассмотрения всех доступных на тот момент вариантов, было принято волевое решение собирать свой «велосипед» из подручных материалов.



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

.NET/Mono в Java? Легко!

Время на прочтение11 мин
Охват и читатели20K
Здравствуйте. Хочу представить свой проект – компилятор .NET/Mono в Java. Целью проекта является создание компилятора, и набора стандартных библиотек позволяющих переносить написанные приложения и библиотеки на платформу Java, версии 1.6 и выше. Из аналогичных проектов мне известен лишь проект dot42. Но он заточен под Android и имеет собственную стандартную библиотеку не совсем совместимую с .NET/Mono.

Пока есть только альфа версия, и поэтому для реального использования компилятор пока не годится, однако уже частично работоспособен, генерирует валидный код Java и поддерживает часть стандарта ECMA-335.

Исходные коды на github.com: https://github.com/zebraxxl/CIL2Java

Подробнее о том, что не поддерживается, что поддерживается и как это все работает.

6 способов: как добавить security для Rest сервиса в Java

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

В данной статье я попытаюсь описать несколько способов, а точнее 6, как добавить security для rest сервиса на Java.



Перед нашей командой была поставлена задача найти все возможные способы добавить security к rest сервису. Проанализировать все за и против и выбрать наиболее подходящий для нашего проекта. Когда я начал искать такую статью в Гугле ничего подходящего не нашел, а были лишь фрагменты и мне пришлось собирать эту информацию по крупицам. Так что думаю, данная статья будет полезна и другим Java разработчикам, пишущим back-end. Я не буду утверждать, что какой-то из этих способов лучше или хуже, все зависит от поставленной задачи и конкретного проекта. Поэтому какой из шести способов подходит больше всего вашему проекту решать только Вам. Я постараюсь описать принцип каждого из подходов и дать небольшой пример с использованием Java и Spring Security.

6 способов

Как я потерял пароль от Android keystore, но потом смог восстановить с помощью Jetbrains Idea

Время на прочтение3 мин
Охват и читатели33K
Предыстория

Жило-было в Google Play Android приложение с несколькими тысячами пользователей. Через год понадобилось его обновить. Ок, запускаем Idea, выбираем «Build» — «Generate Signed APK». Вспоминаю что за это время успел пересесть в Linux, ничего страшного, выбираю файл с ключами, ввожу ранее заботливо записанный пароль… Не подходит. Хмм… Ввожу еще раз, еще… Перебор вариантов, переспрос коллег… Всё плохо.
Что делать, что делать?

Что в ORM тебе моем? Околонаучный подход выбора ORM для Android

Время на прочтение11 мин
Охват и читатели27K
Выбор инструментов, которые так или иначе понадобятся при разработке – один из главных подготовительных этапов на старте нового Android-проекта.
В случае, если вы разрабатываете приложение, которое должно в том или ином виде хранить большое количество сущностей – вам не избежать использования баз данных. В отличие от коллег по цеху, разрабатывающих для iOS, у Android-программистов нет удобных инструментов, облегчающих хранение объектов вроде Core Data, предоставляемых платформой (кроме Content Provider, о том почему он не в счет, будет дальше). Поэтому многие Android-разработчики прибегают к использованию сторонних ORM-решений в своих проектах. О том, на что стоит смотреть при выборе библиотеки для вашего проекта, и пойдет речь в этой статье.


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

GSON. Добавим ему немного строгости и решаем проблему переполнения памяти при обработки больших JSON файлов

Время на прочтение8 мин
Охват и читатели14K
Вероятно многие сталкивались с библиотекой GSON от Google, которая легко превращает JSON файлы в Java объекты и обратно.

Для тех, кто с ней не сталкивался, я подготовил краткое описание под спойлером. А так же описал решения на GSON двух проблем, с которыми реально сталкивался в своей работе (решения не обязательно оптимальные или лучшие, но, возможно, кому-то они могут пригодится):

1) Проверки что мы не потеряли ни одного поля из JSON'a файла, а также проверки того что все обязательные поля в Java классе были заполнены (делаем GSON более строгим);
2) Ручной парсинг с помощью GSON, когда приходится обрабатывать очень большой JSON файл, чтобы избежать ошибки out of memory.
Читать дальше →

Об Oracle Coherence по-русски: Зачем он нужен?

Время на прочтение12 мин
Охват и читатели22K
В данной статье вы найдете ответ на поставленный вопрос, а также в ней будут объяснены базовые понятия по технологии распределенных вычислений в Oracle Coherence. Это вводная статья, главной задачей которой является объяснение “словаря” терминов, которым пользуются разработчики Coherence. Я приведу термины в том числе и на английском языке, для облегчения поиска информации для тех, кто захочет узнать больше в этом направлении.
Для тех, кому эта тема интересна, прошу под кат
Читать дальше →