• Сбор консолидированных данных в сервис-ориентированной архитектуре

    А не проще положиться на возможности СУБД? Многие СУБД обладают возможностью консолидированных запросов к разным бд. Во всяком случае PostgreSQL. И даже MySQL.

    Понятно, что лучше иметь данные на одном сервере. Так тут можно использовать репликацию бд. Для отчётов ведь не особо критично иметь все данные гарантированно в актуальном состоянии.

    Нет, можно конечно замутить map-reduce. Но оно вам нужно всего лишь для отчётов?
    Ответ написан
    Комментировать
  • [AngularJS] связь между данными сервиса и контроллера

    Потому что testService.data и $scope.me — это разные ссылки. Если вы хотите, чтобы обе этих ссылки указывали на один и тот же объект, то обновляйте их обе.

    Но зачем вам две ссылки? Просто поместите в $scope ссылку на ваш сервис и обновляйте данные только в нём.
    Ответ написан
    Комментировать
  • Полноценный встроенный поисковый движок

    Почему бы не использовать Lucene? Движок написан полностью на Java. Работает в Android. Индексы — всего лишь файлы. Можно индексировать, а потом заливать на устройство и использовать для поиска. Ищет быстрее любой БД.
    Ответ написан
    Комментировать
  • Посоветуйте Движок для документации

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

    Раньше использовал DokuWiki. Но это серверное приложение. Отказался в пользу статической документации на github pages.
    Ответ написан
    Комментировать
  • Предсказание переходов

    В GCC есть расширение для этого. Называется __builtin_expect.

    Пример использования:
    if (__builtin_expect (ptr != NULL, 1))
        foo (*ptr);
    
    Ответ написан
    2 комментария
  • Как получить изображение с камеры, подключенной к другому компьютеру?

    Ключевое слово RTP… OpenCV умеет и транслировать, и получать поток через rtp. В качестве сервера можно использовать VideoLAN (VLC). Зачем там Java?
    Ответ написан
    4 комментария
  • Программирование com-портов. Изменение буфера r/w FIFO?

    Мда, а размер буфера PureJavaComm не устанавливает.
    Ответ написан
    Комментировать
  • Программирование com-портов. Изменение буфера r/w FIFO?

    В коде драйверов COM-портов для Java, например в PureJavaComm, встречал очень простой способ: смотрим скорость передачи и делим на неё размер данных. Получаем время, которое нужно подождать до завершения передачи.

    rs232 ну очень примитивный протокол. Передача идёт постоянно, с одной и той же скоростью, пока в буфере есть данные. И не важно, подключено ли к порту устройство, которое эти данные получает. Способа определить наличие устройства нет.

    Ну а размер буфера указать можно, так же как и и узнать переданы ли все данные из буфера. Сказать какие ioctl использовать, к сожалению, не могу. Но разобраться довольно легко. Для примера, как это делается, можно заглянуть в код PureJavaComm — там есть соответствующие вызовы.
    Ответ написан
  • Модуляризация web-проекта на java

    Если уж речь зашла о модуляризации в Java, то уместно вспомнить об OSGi, поддерживаемой Spring.

    Вот тут описывается поддержка веб-приложений. OSGi позволяет собирать ресурсы (классы, JSP, tld) из разных модулей или фрагментов. Описание, правда, выглядит несколько сложным. В реальности всё как-то проще.
    Ответ написан
    2 комментария
  • Булевское свойство или функция

    С точки зрения эволюции кода, безопаснее использовать, например, перечисления (enum). Не «правильнее», а именно «безопаснее», в смысле будущих модификаций.

    Вдруг (наверняка?) у вас возникнет необходимость в дополнительных способах аутентификации (OAuth например)? В случае использования перечислений (или других аналогов шаблона «визитёр» — типа case classes из Scala), среда разработки подскажет вам, где вы забыли учесть новый вариант аутентификации. Не знаю как Visual Studio, а Eclipse или IDEA выдадут предупреждение в следующем коде:
    switch (principal.getAuthMethod()) {
    case LOGIN: /* Login / password auth */
        break;
    case CERTIFICATE: /* Certificate auth */
        break;
    }
    

    как только добавится новый тип аутентификации (OAUTH). Это даст вам знать, что вы забыли учесть новый способ ещё в каком-то месте.

    Так что если IDE помогает в таком деле, то почему бы этим не воспользоваться?
    Ответ написан
    Комментировать
  • Когда применять JS фреймворки

    Конкретно AngularJS сильно экономит время разработки. На одном проекте встречал одну и ту же логику, реализованную на JSP+jQuery и на AngularJS, так уж получилось. Так вот, реализация на AngularJS содержала примерно в 10 (!) раз меньше строк кода. Это потому, что AngularJS следует правильной идеологии: декларативному описанию пользовательского интерфейса.

    Конечно, в сравнении с другими технологиями AngularJS может и не выглядеть столь выигрышно. Однако свою работу он делает, и делает хорошо. Учтите, что помимо диинамичности интерфейса, AngularJS, да и прочие JS-фреймворки, экономят ресурсы сервера. Или вовсе могут избавить от необходимости в серверной логике.

    Вот пример написанного на AngularJS (мною) расширения для Firefox, которое таскает данные с oDesk, расширяя возможности поиска, и не требует дополнительной серверной логики.
    Ответ написан
    Комментировать
  • Флаг остановки в многопоточном обработчике

    Совершенно неправильное использование атомарных операций. Метод destroyImpl(), например, может быть вызван многократно. Почему бы вам не воспользоваться классическими блокировками и не избавиться от атомарных сущностей? Так проще и намного читабельней. К тому же вам необходимо работать сразу с несколькими полями — а это нетривиально, если использовать лишь атомарные операции.

    Должно получиться что-то вроде этого:
    public class Worker {
    
        private boolean destroy;
        private boolean destroyed;
        private counter;
    
        public void destroy() {
            synchronized (this) {
                if (this.destroyed) {
                    return;
                }
                this.destroy = true;
                if (this.counter != 0) {
                    return;
                }
                this.destroyed = true;
            }
            destroyImpl();
        }
    
        public void service(String arg) {
            synchronized (this) {
                if (this.destroy) {
                    return;
                }
                ++this.counter;
            }
            serviceImpl(arg);
            synchronized (this) {
                if (--this.counter != 0) {
                    return;
                }
                if (!this.destroy) {
                    return;
                }
                this.destroyed = true;
            }
            destroyImpl()
        }
    
    }
    
    Ответ написан
    4 комментария
  • Запуск стороннего приложения?

    Разбирайтесь со своей программой. Зачем она чего-то ждёт? Она вызывает Process.waitFor()? Потому что иначе вызывающая программа не ожидает завершения вызванной. Вот код для примера:
    import java.io.IOException;
    
    public class Run {
            public static void main(String[] args) {
                    try {
                            new ProcessBuilder("/usr/bin/kwrite").start();
                    } catch (IOException e) {
                            e.printStackTrace();
                    }
            }
    }
    

    Запускает программу и завершает работу (в Linux). Подставьте запуск notepad и проверьте. Неужели Java-программа не завершит работу?
    Ответ написан
    3 комментария
  • Как научиться писать юнит-тесты, в которых будет смысл и не ошалеть от скуки?

    Знакомая проблема. Хорошо писать тесты для простой функциональности. Но что делать, когда нужно тестировать не просто отдельные функции, а ещё и их комбинации? Что делать, когда количество комбинаций входных данных — огромно, или вообще бесконечно, и каждая комбинация может привести к ошибке?

    Для себя нашёл частичный выход: пишу высокоуровневые тесты, а низкоуровневые заменяю множеством assert-ов. Assert проще написать, поскольку не надо воспроизводить контекст ни программно, ни мысленно — assert всегда выполняется в нужном контексте. И при запуске высокоуровнего теста фактически выполняется гораздо больше проверок, чем написано в самом тесте. Assert-ты также очень помогают в отладке — с их помощью быстрее локализуются ошибки.

    Кстати, для библиотечных проектов совершенно необходимо писать и проекты, эти библиотеки использующие. Иначе — библиотека получается гарантированно ненужной. Так вот, само такое приложение и тесты к нему являются одновременно и тестами библиотеки.
    Ответ написан
    1 комментарий
  • Аналог символа @ для тудулиста на русском

    Вообще, семантически подходят скобки. Ужин с женой (дома). Проблема в том, что скобки вообще много для чего подходят. Тут либо распознавать слова, либо использовать комбинации. Ну типа (- дома). Длинно.

    Есть ещё вариант типа //дома. Он также слишком общий, но по крайней мере в обычном тексте не используется.

    Хм, ну и последнее что придумывается — какой-нибудь значок в скобках (8) дома — восьмёрка немного похожа на русскую «в».
    Ответ написан
    1 комментарий
  • Порекомендуйте стек технологий основанный на Java для вебприложения?

    Spring Framework конечно. Если конечно не хочется ничего особо оригинального (или платного). Для интеграции с социальными сетями можно поискать и отдельные компоненты. Даже если они не интегрированы со Spring изначально — интегрировать в него можно что угодно.

    Но вот веб-стек в Java, как бы это сказать помягче, излишне перегружен. Как насчёт не использовать его совсем? Наймите хорошего front-end — разработчика, пусть напишет вам полностью динамический UI (на jQuery UI например), а ваш back-end в таком случае будет всего лишь RESTful-сервисом. И современно, и модно, и с тяжеловесными технологиями типа JSF с их десятиэтажными абстракциями заморачиваться не придётся…
    Ответ написан
    2 комментария
  • Где искать «командного» фрилансера?

    А «командные» фрилансеры без собственной команды разве бывают? Как вы вообще представляете себе работу с малознакомым человеком удалённо, но «в команде»? Фрилансеры-одиночки, как правило, берут чётко поставленную задачу и выполняют её. Качественно и в срок. Этим и обеспечивается репутация. Если же вы не в состоянии чётко сформулировать задачу, то что можно сказать о вашем отношении к архитектуре?

    Так что ответ: нигде.
    Ответ написан
    3 комментария
  • Ссылка на файл вне JAR'a?

    Если это отдельное приложение, то почему бы не размещать все настройки приложения (в том числе и log4j.properties) в стандартных (т.е. предопределённых) местах? Типа директории /etc/yourapp и/или /home/.config/yourapp. Посмотрите спецификацию XDG ну или хотя бы системные свойства Java.

    Ну а если приложение запускается внутри сервера приложений, то там есть свои собственные возможности. Про JNDI уже упоминали.
    Ответ написан
  • Как эффективно работать с программистом?

    Программист — это исполнитель прежде всего. В этой роли его и используйте. А нагружая его «дедлайнами» и прочей управленческой чепухой вы заставляете его делать несвойственную ему работу, фактически перекладывая на него свою ответственность.

    Хотите выполнения в сроки и в должном качестве? Разбивайте задачу на возможно более мелкие итерации таким образом, чтобы результаты каждой итерации вы могли бы реально проверить и ставьте точные технические задания на каждую из них. Так и вы быстро сможете понять, насколько разработчик справляется с делом, и по отношению к разработчику поступите честнее. В остальном придётся полагаться на разработчика.

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

    А то, какими инструментами будете пользоваться лично вы никоим образом на результатах работы разработчика не отразится.
    Ответ написан
    Комментировать
  • Open source (GPL3) — я чего-то не понимаю?

    Кстати, вот ещё один интересный момент. Если вы поступите как они хотят: то есть скачаете исходный GPL код и модифицируете его согласно инструкциям, то результат подпадает по GPL. Это значит, что вы имеете полное право передать исходники не только заказчику, но и кому угодно ещё, то есть выложить в открытый доступ. В определённой ситуации вы даже будете обязаны это сделать. И запретить они вам этого не могут (по условиям GPL). Так что их перестраховка с невыдачей вам исходников бесполезна в любом случае.
    Ответ написан
    Комментировать