• Иски о защите деловой репутации. Как избежать?

    @Elizavetta
    Matroid: gamedev/js-разработка
    Используйте легальные способы без прямой атаки на деловую репутацию,
    берите на вооружение их же оружие.
    Например, они часто, создают довольно негативный образ работающего человека в противовес "людям успеха". Вы можете в противовес раскручивать свои фразы, "бездельники-коучи", "продавцы воздуха", и тп

    По поводу фактов мошенничества, как написано выше, не пишите Петров=мошенник. "часть клиентов Петрова готовы провести экспертизу по поводу признания деятельности предпринимателя мошеннической в соответствии со статьей X УК РФ" - в фразе такого типа намного сложнее показать факт ущемления репутации.
    Пишите о судебных исках, делах, пусть люди из суда предоставят материалы. Если иск реально подан - это не клевета, а реальный факт.
    Далее, можно использовать юмор, и другие методы информационной борьбы.
    Граждане непонятных государств - тоже отлично
    Ответ написан
    3 комментария
  • Как лучше реализовать чат клиент-сервер на java websocket?

    @SergTito
    На самом деле все подобные вопросы несколько раз уже обсуждались тут t.me/springframeworkio
    Ответ написан
    Комментировать
  • Где хранить данные для авторизации?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Сами данные авторизации лучше хранить в файле конфигурации. Оттуда они должны доставаться контекстом приложения и подставляться в свойства класса-клиента API. Как-то так.
    Ответ написан
    Комментировать
  • В каких случаях может потребоваться JNDI?

    drno-reg
    @drno-reg
    см не кратко
    JNDI отличный функционал, который сможет самостоятельно разруливать взаимоотношения вашего приложения допустим с сервером СУБД и т.д.. Этим функционалом обладает даже WEB контейнер Apache Tomcat.
    Ответ написан
    Комментировать
  • В каких случаях может потребоваться JNDI?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    JNDI можно использовать для доступа к общим ресурсам, вроде соединений с БД, очередей сообщений, конфигурационных переменных. К примеру, можно в настройках сервера приложений создать соединение с БД, которое будет использоваться несколькими приложениями.
    Однако, сейчас JNDI становится менее популярным инструментом, так как современные приложения разворачиваются в большинстве случае не в серверах приложений. Для распределённой конфигурации сейчас есть такие инструменты, как Spring Cloud Config, Apache Zookeeper, Consul и прочие.
    Ответ написан
    Комментировать
  • В каких случаях может потребоваться JNDI?

    @protven
    Если кратко, то обычно, когда у вас есть какой-то сервер приложений, вы там создаете всякие ресурсы (data-source, jms, etc) средствами самого сервера, а не внутри своего приложения. А приложение уже получает ссылку на ресурс из JNDI по имени ресурса.
    Ответ написан
    1 комментарий
  • В каких ситуациях при тестировании может понадобиться Reflection?

    lxsmkv
    @lxsmkv
    Test automation engineer
    Мы используем рефлексию для работы с объектами во время выполнения программы.
    Наша архитектура не всегда предоставляет доступ к объектам (в некоторых частях приложения нет фабрик, нет реестров объектов, нет синглтонов и пр.) либо не предоставляет интефейса для работы с ними. Но такая необходимость признак не очень хорошей архитектуры.
    Если вы хотите тестировать не запуская программу, то рефлексия в принципе и не нужна, только если вы хотите залезть "голыми руками в трансформаторный щиток" и знаете что делаете. Архитектура компонент должна предоставлять вам необходимые интерфейсы для тестирования. Иначе у вас классическая проблема с "testability".
    Такая проблема часто возникает когда сначала пишут приложение, а потом думают как бы его протестировать. Но уже поздно. И приходится рефакторить.
    Ответ написан
    Комментировать
  • Какова производительность cast в Java?

    @kuftachev
    Начнем с того, что сама постановка вопроса в корне не правильная. Это могло бы звучать так: "я сделал код, провел замеры и все уперлось в операцию cast, что мне делать?".

    Это же прописанные истины, преждевременная оптимизация - корень зла!

    Но если на сам вопрос, то операция приведения типа должна быть быстрая, но как уже написали, тут явно не тот случай, когда ее нужно применять.
    Ответ написан
    Комментировать
  • Чем SVN лучше Git?

    @miksir
    IT
    Основные отличия - гита от svn - распределенность и хорошая поддержка ветвлений в разработке (ветки).

    SVN, конечно же, поддерживает ветки, но при сложных ветвлениях (ветки мержатся между собой) случаются неожиданные конфликты и т.п. Хотя, если у вас классическая схема - фича-ветка от мастера (транка) и обратный мердж в мастер (транк) - разница почти незаметна.

    Про распределенность: у SVN центральный сервер, у гита - граф серверов, хотя 99% процентов разработчиков используют локальный репо + один удаленный, т.е. по сути - тот же центральный сервер. Зато, так как репа локальная, гит очень быстр в переключении веток.

    Есть еще куча различий и, как плюсов, так и минусов у каждого ПО. Хотя сегодня SVN все реже и реже можно встретить, но в общем для многих рабочих групп его вполне достаточно для полноценной работы. С другой стороны - знать git тоже обязательно сегодня, ибо почти стандарт ;)

    Если вот так на первый взгляд поискать "чем svn лучше"...
    • работа с бинарными файлами, и быстрее и есть централизованные локи по репозиторию (что важно, ибо мердж бинарного файла обычно не очень эффективен);
    • есть система управления доступом вплоть до веток;
    • комит определенного юзера этим юзером и подписан, тогда как в гите аутентификация и поле автора не связаны никак (впрочем, последние две проблемы можно пофиксить хуками);
    • порядок комитов явный, т.е. есть глобальный счетчик с номером у каждого комита, хотя, конечно, не так принципиально;
    • частичный чекаут, т.е. начиная с любого узла SVN, удобно, если много мелких проектов - не нужно несколько репозиториев, просто один с папками проектов в корне


    Но я бы не стал говорить, что svn нормальный, а git нет. Просто он другой и со своими тараканами. Сам долгое время работал на SVN, потом потихоньку перебрались на git в основном из-за подводных камней сложного ветвления.
    Ответ написан
    Комментировать
  • Какова производительность cast в Java?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    best practices в таких случаях - не кастовать, а пользоваться полиморфизмом. Ведь декораторы нужны, чтобы что-то декорировать/абстрагировать, а не вытаскивать из них кишки конкретной реализации с помощью каста.
    Ответ написан
    2 комментария
  • Чем SVN лучше Git?

    sim3x
    @sim3x
    свн - централизированное хранилище
    Такой кейс очень редок
    свн стоит использовать если с проектом будет работать один человек
    Ответ написан
    2 комментария
  • Как развить навык проектирования приложения или как стать Senior?

    ha7y
    @ha7y
    Проактивный менеджер IT проектов
    Предлагаю определить Junior, Middle, Senior следующим образом, чтобы было понятно, куда двигаться:
    • Junior - вы только-только начали ориентироваться (в языке или , может быть, в предметной области, в которой работает компания), поэтому вам говорят что делать и как это делать. Вы задаёте вопросы "почему так, а не вот так?" и получаете ответы (иногда ищете сами). Для вашей работы готовы все необходимые каркасы,
      вы делаете то, что для остальных очевидно. Вы с удовольствием фигачили бы код килобайтами, но пока много не знаете/не понимаете, поэтому основное время проводите в изучении: статей в интернет, мануалов по языку, чужого кода
    • Middle - вы хорошо ориентируетесь (в язые или, может быть, в предметной области, понимаете употребляемый окружающими жаргон и можете поддержать беседу, рассказать о том, что узнать про это в интернете или конференциях), поэтому самостоятельно решаете как делать то, что вам говорят сделать, иногда оспаривая те или иные решения и предлагаю свои. Вы фигачите код килобайтами и даже мегабайтами и решаете не только стоящие перед вами задачи, но и учитесь делать что-то неизвестное ранее. Порой даже уговариваете менеджеров соглашаться на нереальные сроки и работаете по вечерам допоздна, лишь бы попробовать какую-то новую технологию/фреймворк/язык/etc
    • Senior - вы свободно ориентируетесь (и в языке, и в предметной области, и в имеющемся в компании коде, вводите в обиход новые жаргонные словечки, которые подхватывают все), поэтому самостоятельно решаете как сделать и что сделать на основании целей и проблем, описанных руководством/заказчиком, иногда отговариваете их делать что-то ради того, чтобы сфокусировать команду и себя на важных вещах. Основная масса кода, который значится за вами в репозиториях сделаны в одном из первых коммитов, и включает в себя настройку подключенных фреймворков и создание каркаса для наполнения его силами Middle и Junior разработчиков. Вы отговариваете и убеждаете всех вокруг не делать то, чего делать не нужно, присматриваете за тем, чтобы Junior'ы (в большей степени) и Middle'ы (в меньшей степени) действовали согласовано и трактовали заложенный в проект каркас так, как вы это подразумевали.
    Ответ написан
    Комментировать
  • Как развить навык проектирования приложения или как стать Senior?

    @OldCrazyCoder
    Писать код. Читать код. Например, популярные опенсорсные проекты на гитхабе. Если очень уж книгу хочется, то вот минимальный джентельменский набор:
    1. Совершенный код. С. Макконнелл
    2. Чистый код: создание, анализ и рефакторинг. Роберт Мартин
    3. Приёмы объектно-ориентированного проектирования. Паттерны проектирования. Банда четырех))
    4. PHP. Объекты, шаблоны и методики программирования. Мэт Зандстра
    5. Рефакторинг: улучшение существующего кода. Мартин Фаулер
    И т.д. Книг крайне много. И статей много. И простое их чтение мало что даст. Практика, много практики. Критичное отношение к своему коду, однако без перегибов - не стоит упираться в перфекционизм.
    Ответ написан
    Комментировать
  • Как замэпить Map< String, ArrayList> объект в hibernate?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Никак. Маршалинг всегда симметричный. Если бы можно было при сохранении сущности в базу отбросить ключи отображения, то откуда бы они взялись при восстановлении сущности из базы?
    Ответ написан
    Комментировать
  • Действительно ли Messenger - это антипаттерн?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Что то я не вижу никакой связи между RxJava и JMS. Это сравнение правил дорожного движения со стандартами коробки передач.

    RxJava - о событиях внутри приложения.
    JMS - о событиях между приложениями (возможно даже на разных языках и платформах).
    Ответ написан
    2 комментария
  • Как правильно вносить данные в БД?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    У меня был похожий случай.

    1. Имеем веб морду.
    2. Есть большая таблица, в которой куча табличных ячеек.
    3. Необходимо на всех клиентских машинах отображать актуальные данные без перезагрузки страницы

    Я сперва реализовал следующим образом:

    1. Поднял WebSocket который слушали все клиенты.
    2. Поднял демона, который опрашивал Rest и вытаскивал данные.
    3. В случае новых данных демон сувал их в базу и через WebSocket отправлял широковещательное сообщение в виде JSON строки.
    4. Со стороны клиента через JS вытаскивал данные с сокета и обновлял пользователю интерфейс.
    5. Все пользователи имеют актуальные данные без перезагрузки страницы.

    Как опрашивал Rest.
    1. Создал табличку text + int.
    2. В text хранил название таблицы интерфейса, в int - последний инкремент
    3. Опрашивал с условием > int
    4. Ложил в локальную базу.
    5. Оповещал клиентов по WebSocket

    Сечас немного по другому. В 1С есть подписка на события, при изменении или создании документа можно вызвать обработчика, в моем случае просто происходил HTTP запрос с передачей данных в post теле JSON сериализации.

    В вашем случае, если не важно и не актуально, либо не возможно изменение документа - только такой вариант: постоянный опрос.
    Ответ написан
    Комментировать
  • Как правильно вносить данные в БД?

    Так как локальные данные запрашиваются через свой API, то я бы это реализовал по похожему принципу, как работает кеширование. По запросу данных из вашего API, происходит проверка на то, как давно данные обновлялись. Если давно (регулировка времени на своё усмотрение), то происходит запрос на сторонний сервис и данные в локальном хранилище обновляются и сохраняется время последнего обновления. Минус этого подхода в том, что первый запрос в некий промежуток времени будет обрабатываться дольше из-за всех операций.

    Если не критично, можно обновлять данные в локальном хранилище после обработки запроса, дав клиенту "устаревшие" данные, чтобы избежать этой паузы. Следующим запросом клиент уже получит актуальные данные, т.к. к этому моменту они скорее всего успеют обновиться.

    Но для решения вашей проблемы нужно учитывать больше нюансов, это лишь общий ответ на основе информации в вопросе.
    Ответ написан
    Комментировать
  • Что можно тянуть в одного на Java?

    @frozen_coder
    Java-developer
    Напишите файловый сервер с возможностью загрузки файлов через ftp-клиент, через web-морду, через SOAP ( или REST), через мобильную приложуху с аутентификацией, базой юзеров, также можно в базе хранить какую-нибудь метоинформацию о файле. Например, может быть такой маленький личный фотоальбом с подписями(блог-постами, комментами etc.), фотки из которого доступно скачать и залить повсякому. Попробуете всё.
    web и Java = Enterprise. Это приложения масштаба предприятия, т.е. они как-то автоматизируют его бизнес-процессы и документооборот, переносят его работу в web и электронный формат. Они также могут общаться с другими приложениями, системами. Отсюда пляшем. Вам нужно какое-то предприятие, у которого вся работа в оффлайн, всё плохо, бюрократия и ад. Придумайте сложный бизнес-процесс со сложными сущностями. Разный и изменяющийся во времени и пространстве уровень доступа. Интеграция с другими приложениями или гос.сервисами. Электронный банк, электронные платежи, электронная валюта. Наворотить можно много чего.
    Начните с малого - какой-нибудь справочник-реестр с функциями CRUD - создать, прочитать, редактировать, удалить запись. Далее прикрутите систему прав и ролей пользователей(не все могут создавать, редактировать и тем более удалять). Добавьте работу с файлами - скачать, загрузить, экспорт в pdf и exel. Продолжайте накручивать своё приложение функционалом - личка и чат, доска объявлений, имитация отношений начальник - подчиненный (тайм-менеджмент, таск-менеджмент, сбор отчетов каких-нибудь по работе), уведомления (в почту, в системе, м.б. попробовать с смс), напишите другую маленькую систему и заобщайте их между собой по SOAP или REST(например, другая система может читать из справочника и что-нибудь туда писать). Берите какое-нибудь гипотетическое предприятие (склад, магазин, автосервис, школа, больница, завод и т.д.) и представьте, что ему надо свой документооборот перевести в электронный вид и максимально автоматизировать бизнес-процессы.
    Из фреймворков - семейство Spring.
    Ответ написан
    6 комментариев
  • PHP или Java в backend ?

    @DemaFayz
    Лучше всего для бекенда, это Java. Но тут есть одно условие... Когда речь идёт о Java, нужно подразумевать Spring (объясняю почему... Дело в том, что истинный потенциал языка программирования Java заключается не в ООП, а в АОП, и потенциал АОП открывается благодаря мощнейшому фреймворку Spring Framework), Но для этого нужны очень хардкорные знания программирования и для изучения необходимо уйма времени и сил... И когда ты выучишь Java EE Spring в России тебе не будет цены. А этот PHP для сосунков. Писать на PHP очень просто. Но истинный хардкорный бекенд программист всегда пишет на Java Spring... А всю остальную фигну он на одном месте вертит... Так что решай сам идти какой дорогой, по легкому или по сложному.
    Ответ написан
    1 комментарий
  • Как сгенерировать таблицы БД по имеющимся моделям?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега PostgreSQL
    Седой и строгий
    Можно. Достаточно добавить в конфигурацию Hibernate
    <property name="hibernate.hbm2ddl.auto">create</property>
    Ответ написан
    Комментировать