• Существуют ли бесплатные трекеры для управления задачами - аналоги Redmine?

    Из модного - Taiga.
    Ответ написан
    Комментировать
  • Что лучше использовать для мультимодульного проекта: subtree или submodule?

    Лучше воспользоваться системой управления зависимостями. Например Apache Ivy или аналогичной. Считается, что subtree и тем более submodule являются упрощенными и ограниченными по функциональности заменами нормальных систем управления зависимостями. Вот неплохое описание проблем связанных с использовани....
    Использование Ivy подразумевает наличие системы сборки проекта. Но возможности по управлению зависимостями открываются неограниченные. Особенно приятно когда у вас команда из больше чем 2-3 человек, 2-3 десятка библиотек и нужно поддерживать и развивать несколько версий приложения одновременно.
    Хотя Ivy написана на Java и очень тесно интегрирована в мир Java, она является универсальным менеджером зависимостей и мы использовали ее для управления зависимостями в проекте на C#.
    Возможно, для C++ есто что-то свое, но я далек от этого мира.
    Ответ написан
  • Какие цели и задачи у Docker в production?

    Мы используем Docker для установки Java приложений вместе с окружением. В скрипте сборки собирается контейнер из Docker-файла в него ставится все что нужно, запихиваются настройки и само приложение.
    Можно вызвать команду deployment-a, если есть настройки доступа к удаленным серверам.
    Да, деплоймент упрощается значительно.
    Но главная причина по которой мы используем Docker - это возможность зафиксировать окружение. В java многое для этого сделано, легко можно собрать приложение с заданным набором версий библиотек. Но вот отслеживать версии окружения (серверов приложений и т.д.) приходилось ручками или в документации. Что вело к возникновеню понятных проблем. С Docker-ом вся конфигурация описана в файле и лежит в Git и версионируется вместе с приложением.
    Ответ написан
    5 комментариев
  • Gitflow мёртв? Какие есть альтернативы?

    Наверное он умер. Как слишком сложная концепция для такой простой вещи как Git.
    А, вот, почитайте еще про Trunk Based Developmentтут), чтобы еще больше усомниться в полезности GitFlow.
    Ответ написан
    3 комментария
  • RTC jazz vs git. Стоит ли переходить с RTC на git?

    Ого! Jazz еще жив!
    В нем конечно хорошая интеграция всего со всем, но если вы этим не пользуетесь, да еще и его тяжеловесность является препятствием к использованию SCM, то лучше от него отказаться.

    Работа должна быть в радость. Git поощряет разработчиков делать частые коммиты. Это просто и быстро. Так же с Git проще экспериментировать с кодом.
    А еще Git - это mainstream. Разработчик с ним не пропадет.

    Но у многих пользователей централизованных SCM наблюдается проблема с осознанием распределенной структуры Git.
    Ответ написан
    Комментировать
  • Как разработать грамотную архитектуру приложения: работа с базой данных?

    Первый подход плох тем, что в нем вы создаете God-object, он берет на себя слишком много ответственности, что противоречит принципу SRP. Класс будет иметь большой размер и в него постоянно будут вноситься изменения при изменении функциональности.

    Второй подход почти правильный. Не хватает только интерфейсов UserServiceInterface и ArticleServiceInterface, в которых описаны методы доступа к данным. Обычно такие интерфейсы называются Repository, а не Service. Эти интерфейсы должны быть реализованы в конкретных классах, например OracleUserService и OracleArticleService. Для взаимодействия с БД, данные классы используют только сессию (Session) или соединение (Connection). В вашем примере это DbHandler.

    Почитайте про устройство Hibernate. Он использует второй подход.
    Ответ написан
    Комментировать
  • Где можно найти инф-у по Vim`y?

    На английском: devfreebooks.org/vim
    Ответ написан
    Комментировать
  • Как автоматически посчитать людей в вагоне метро при помощи видеокамеры?

    Посчитать число всех вошедших и вычесть число всех вышедших? :)
    Или вы спрашиваете про технологию подсчета людей с помощью камеры?
    Как это сделать с помощью камеры я не знаю, но знаю, что есть готовые и работающие технологии подсчета пассажиров на общественном транспорте с помощью планки из ИК-светодиодов и ИК-приемников закрепленной над каждым входом. Планка распознает шаблон голова-плечи. И очень хорошо работает на взрослых, иногда ошибается на маленьких детях, так как они низкие.
    Ответ написан
  • GIT: Зачем нужны указатели на ветки?

    Указатель позволяет обратиться к конкретному коммиту по осмысленному имени.
    Ни какой особой разницы между HEAD и именованными коммитами на ветки или тегами нет.
    Просто, если их не будет, вам же самому будет трудно отыскать нужную ветку или тег.

    Как можно по вашему использовать один HEAD для того чтобы показывать на текущий коммит и на коммиты веток? Он один должен будет показывать на все? И быть словарем, чтобы можно было в нем одном сохранить несколько разных указателей под разными именами? А теперь подумайте о распределенной природе Git и подумайте как бы вы синхронизировали такой HEAD между репозиториями. Как бы вы понимали какие ветки или тэги локальные, а какие нужно сливать в удаленный репозиторий.
    Ответ написан
    Комментировать
  • Как организвовать многопоточное взаимодействие с БД в Java?

    В мире Java для работы с БД принято использовать Hibernate. Но, как обычно, есть проблемы.
    Ответ написан
    Комментировать
  • Что почитать для мотивации?

    В.Лобас. Желтые короли. Записки нью-йоркского таксиста.
    Очень весело про то как честный и упорный труд помогает достичь успеха.
    Ответ написан
    Комментировать
  • Стоит ли начинать заниматься программированием в 30+ если до этого не программировал?

    Конечно стоит. Я знавал бывшего милиционера (!!!) ставшего программистом микроконтроллеров, причем переквалифицировался он в возрасте около 30 лет.

    Надо начать, заниматься этим год, а потом честно себя спросить, стоит ли продолжать или нет. Я думаю года вполне достаточно чтобы работать на junior позициях.
    Ответ написан
    Комментировать
  • Как объяснить команде зачем проводить daily scrum?

    Daily Scrum Meeting очень важен! Основная задача которую он решает это принудительная синхронизация разработчиков в команде. Глупо надеяться, что разработчик будет проявлять инициативу каждый день и ходить опрашивать своих коллег кому чем помочь или кто может ему помочь. Поэтому вводится обязательная процедура.

    Вообще Scrum он про ритм работы команды. На верхнем уровне ритм задается итерациями, уровнем ниже он задается DSM.

    Чтобы получить максимальную пользу от DSM нужно проводить его каждый день в одно и тоже время, сдвигать запрещено, не приходить можно, но только по уважительным причинам. Главное не выходить за рамки 3-х вопросов, все обсуждения выносятся за рамки митинга, тогда собрания будут короткими.

    И еще, лучше проводить DSM стоя в формате stand-up meeting, это также позволит ограничить его продолжительность и повысить эффективность.
    Ответ написан
    4 комментария
  • GITLAB & Subtree - возможно ли?

    Придется пользоваться консольным клиентом. Я проверил работу git-subtree на версии Git 1.8.1.msysgit.1 под Windows.

    Я нашел в группе tortoisegit-dev запрос на добавление поддержки git-subtree датированный 27 февраля 2014 года. Думаю реализован он будет не очень скоро.

    На Windows очень удобно пользоваться Git из PowerShell с помощью posh-git.
    Ответ написан
  • Текстовый редактор и компилятор или IDE - что лучше и почему?

    Выбор инструмента зависит от задачи которую вы решаете в данный момент.

    В период активной разработки проекта удобнее использовать IDE. В это время вы пишете много кода в разных местах проекта. В IDE много сделано для удобства и повышения производительности при активной разработке.
    А в период поддержки проекта иногда удобнее использовать текстовый редактор для того чтобы открыть конкретный файл и быстро исправить в нем что-то. Потом запустить скрипт сборки (с тестами) и получить новую версию программы.
    Ответ написан
    Комментировать
  • Как заставить Apache Ant игнорировать проверки SSL при загрузке файла через такс get?

    В 7-й Java по умолчанию включен SNI. В некоторых случаях это приводит к ошибке как у вас. Можно отключить SNI при запуске Ant или IDEA.

    -Djsse.enableSNIExtension=false
    Ответ написан
    Комментировать
  • Существует ли статистика по методикам повышения качества ПО?

    Нашел статью рассказывающую об исследованиях 2007 года. В статье говориться, что примерно в это время Agile методологии были признаны широко употребляемыми.
    Для чего вам нужен ответ на этот вопрос?
    Если вы хотите кого-то переспорить, то это пустая трата времени.
    Если хотите убедить начальство попробовать Agile, то лучше продемонстрировать реальные результаты, полученные вашей командой.
    Лучшая статистика - это статистика собранная по вашей команде до и после внедрения выбранной методологии.
    Ответ написан
    Комментировать
  • Как протестировать java-классы из-под ant?

    Для запуска тестов вам необходимо передать junit две path-структуры: classpath и скомпилированные тесты. В classpath (в примере это переменная ${test.classpath}) передаются все необходимые для выполнения тестов библиотеки и тестируемые классы.
    В параметр dir нужно передать скомпилированные тесты. Следите за тем, чтобы туда не попадали вспомогательные классы из /test, так как junit попытается их выполнить.

    Пример:
    <target name="init-test" depends="prepare">
                    <path id="test.classpath">
    			<fileset dir="${lib}">
    				<include name="*.jar" />
    			</fileset>
    			<pathelement location="${project.classes.build}" />
    			<pathelement path="${test.build}" />
    			<pathelement path="${test.build}/etc" />
    			<pathelement path="${test.build}/etc/test" />
    			<pathelement path="${test.build}/etc/mappings" />
    		</path>
    		<fileset id="test.fileset" dir="${test}">
    			<include name="**/${test.class.pattern}.java"/>
    			<exclude name="**/Abstract${test.class.pattern}.java"/>
    			<exclude name="**/Base${test.class.pattern}.java"/>
    			<exclude name="**/TestUtils.java"/>
    		</fileset>
    		<copy todir="${test.build}/etc/test">
    			<fileset dir="${etc}/test"/>
    		</copy>
    		<copy todir="${test.build}/etc/test">
    			<fileset dir="${etc}/mappings"/>
    		</copy>
    		<copy file="${etc}/hibernate.cfg.xml" todir="${test.build}/etc"/>
    	</target>
    
    	<target name="compile-test" depends="compile, run-checks">
    		<javac srcdir="${test}"
    			destdir="${test.build}"
    			classpathref="run.classpath"
    			source="${minimum.javaversion}"
    			target="${minimum.javaversion}"
    			debug="${debug.mode}"
    			encoding="UTF-8"
    			includeantruntime="no" />
    		<copy todir="${test.build}">
    			<fileset dir="${test}">
    				<exclude name="**/*.java" />
    			</fileset>
    		</copy>
    	</target>
    
    	<target name="run-test" depends="init-test, compile-test">
    		<mkdir dir="${test.xml}" />
    
    		<junit 
    			haltonfailure="off"
    			haltonerror="off"
    			errorproperty="test.failed"
    			failureproperty="test.failed"
    			showoutput="no"
    			printsummary="yes"
    			includeantruntime="yes"
    			dir="${test.build}"
    			fork="true">
    			<jvmarg value="-Dfile.encoding=UTF8"/>
    			<classpath>
    				<path refid="test.classpath" />
    			</classpath>
    			<formatter type="xml"/>
    			<batchtest todir="${test.xml}">
    				<fileset refid="test.fileset" />
    			</batchtest>
    		</junit>
    	</target>
    
    	<target name="test" depends="run-test" description="Run unit tests">
    		<fail if="test.failed"
    			message="At least one test has failed. See logs (in ${test.xml}) for details (use the target test-report to run the test with a report)" />
    	</target>
    Ответ написан
    Комментировать