• Стоит ли сейчас читать Стива Макконнелла - Совершенный код?

    @EvgeniiR
    https://github.com/EvgeniiR
    Вобщем, ответ на ваш вопрос - это на первый взгляд в IT все бежит, если углубиться, все эти новые js или не js фреймворки это малая доля от того что нужно знать и что меняется, а на фундаментальном уровне за 20 последних лет ничего кардинально не меняется. Книги по конкретным фреймворкам которые не вносят чего-то необычного (типа actor model) и современные читать смысла не много(ибо дока + паттерны под капотом и архитектурные правила те же что и раньше), а чтобы понять какой-нибудь MVC(а большинство не понимает что это такое аля "создал папочку контроллеры значит MVC т.к. так на Хабре пишут") и сейчас читать записи 70-х годов по сути необходимо, если вдруг когда-нибудь захочется углубиться, конечно. Тоже самое с очень многими темами.
    P.s. В общем, читать Совершенный Код исключительно хорошее занятие, как и Рефакторинг от Фаулера например :)
    Ответ написан
    1 комментарий
  • Стоит ли сейчас читать Стива Макконнелла - Совершенный код?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    5d7f0b5389564256710740.jpeg
    Дядя Боб совсем недавно в своём блоге в очередной раз писал, что в программировании ничего принципиально не поменялось с 80-х.
    Ответ написан
    1 комментарий
  • С чего начать учить Kotlin?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно рассмотреть 2 Котлина. Или два варианта использования.

    Первое - это разработка под Adroid. Тут как бы понятно. Если Google его поддерживает то его стоит
    изучать и использовать. Но это означает - связать свою жизнь с клепанием формочек в мобилах.

    Второе это Spring/Kotlin/Java/Groovy e.t.c. Стек современного ентерпрайза. Тут - я бы не был так уверен.
    Дело в том что Java технологии - в силу генезиса опирается на достаточно старый и консервативный стек.
    И почти все стектрейсы ошибок будут неизбежно содержать сущности мира Java (JDK). От этого не уйти.
    Это как С++ разработчик вынужден знасть ассемблер когда дело касается анализа крашей приложения
    и вопросов ABI. Короче "не отпускает мать-земля"! Сколько ни придумывай абстракций а как жахнет
    черный или синий экран - сиди и вспоминай назначения регистров и что в них функция положила.
    Из позитивных моментов. Kotlin очень часто хвалят за лаконичный синтаксис и null-safety. Но последние
    несколько лет java community взяло бешеный темп развития (иначе я это назвать не могу) и начинает
    вносить изменения в спеку языка. Records, Pattern matching все эти штуки сильно приближают
    Java к Scala и Kotlin и возможно через лет 5 матрица фич этих языков будет одинаковой по всем
    позициям. Просто будут по разному называться. Вместо какого-нибудь "оператора Элвиса" будет
    оператор "Джона Леннона". Вобщем стоит ли рваться в Котлин "любой ценой" - я не знаю.
    Ответ написан
    Комментировать
  • Практическое использование схем в Postgresql - когда они нужны?

    В целом, понимайте схемы как пространства имен. Схемы помогают логически организовать структуру БД. Различные приложения или компоненты приложений внутри себя имеют более высокую связность, чем между собой, тоже самое и с данными в БД - часто таблицы сами по себе организуются в логические группы, причем внутри группы связей довольно много (внешние ключи, какие-то общие хранимые процедуры и т.д.), а между этими группами - мало или нет вовсе.

    Важно понимать, что различные БД плохо подходят для логического группирования, т.к. разбиение по базам данных нужно скорее для администраторов, а не для приложений. Плюс, в большинстве СУБД, где существует понятие схемы, возможно ставить внешние ключи на таблицы в другой схеме, но нельзя на таблицы в другой БД. Иными словами, отдельные БД удобно создавать тогда, когда вы разделяете данные абсолютно не связанных приложений или сервисов. Например, складского учета и форума поддержки пользователей. С другой стороны, если вы хотите логически разделить таблицы в соответствии с компонентами одного приложения (например, корпоративный портал: 4 таблицы для поддержки авторизации, 10 таблиц для поддержки форума, еще 5 для чата со службой поддержки или отделом продаж) - то именно схемы будут удобным механизмом для этого.

    Если сформулировать коротко, то разбиение на базы данных - это для администраторов БД, а разбиение на схемы - это для администраторов данных и разработчиков приложений, чтобы им же было легче.

    А что будет если несколько юзеров будут на одну public-схему коннектиться?

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

    Вот допустим, у вас есть отдельная схема для таблицы авторизации и аутентификации и отдельная - для корпоративного форума. Сервис авторизации у вас выполнен отдельно от форума (например, авторизация выдаёт токены пользователю, с которыми он потом может зайти на форум). С точки зрения безопаности было бы логичным выдать сервису авторизации и форума различных пользователей в базе - тогда, при взломе форума невозможно будет получить доступ к паролям в базе или изменить права на портале, подправив данные в таблице ролей. Конечно, многие СУБД разрешают ставить права на отдельные таблицы, однако схема в данном случае играет роль контейнера и позволяет проставить единые правила для всех таблиц внутри неё.

    то есть при работе в постгре предпочтительнее вместо отдельных баз делать разные схемы в одной

    Как вы уже поняли - для независимых приложений, которые могут и должны существовать отдельно друг от друга - лучше делать разные базы. Тогда администраторы смогут спокойно переносить базы с сервера на сервер, независимо их бэкапить и т.д. Для компонентов одного приложения нужно использовать схемы.

    Вот вам еще хороший пример. У вас есть приложение для ведения бухгалтерии и складского учёта на фирме. При этом сложилось так, что вам нужно хранить на одном сервере данные нескольких разных фирм (например, вы предоставляете готовый сервис под ключ нескольким клиентам). В этой ситуации более чем логично хранить данные разных клиентов в разных БД, а данные бухгалтерского и складского учета - в различных схемах в рамках одной БД конкретного клиента.
    Ответ написан
    2 комментария
  • Как разобраться в сетях?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Начинать надо с малого. Сначала эхо-сервер, потом чатик, многопользовательский чатик, многопоточный чатик, простой web-сервер и так далее, постепенно наращивая сложность. Кроме того, намного лучше идёт обучение, когда есть понимание принципов работы сетей. За этим знанием можно обратиться к учебнику "Компьютерные сети" Таненбаума.
    Ответ написан
    3 комментария
  • Как правильно назвать rest-функции?

    @pcdesign
    Вообще это серьезный на самом деле вопрос.
    Как правильно называть функции, как правильно называть переменные?
    Этому вопросу посвящено определенное кол-во страниц в книгах: "Совершенный код", "Чистый код: создание, анализ и рефакторинг" и т.д. Если решили подключить перфекционизм, то вам стоит изучать эти книжки, хотя бы соответствующие главы.

    Вообще, проблема с правильным именованием присуща всем языкам.

    А конкретно с оформлением, да есть определенные стандарты. Например, есть языки где принят "горб верблюда" - getUserId(), в python в основном используют нижнее подчеркивание - get_user_id. Но это, имхо, уже мелочи.
    Ответ написан
    Комментировать
  • Git: объясните «на пальцах» разницу между rebase и cherry-pick?

    Все красиво объяснил Nkly777, только в блоке PS merge с rebase перепутаны.
    Добавлю картинок.

    git rebase devel - собачка на молнии - "сшивает" коммиты по дате их создания
    (ветка devel "растворяется" в основной ветке)
    518b8dbce1cd4f96b30de9782ae38fcd.png
    git merge devel - пожарная лестница, все коммиты ветки devel крепятся в конец, образуется пересечение
    (devel остается отдельной веткой, к которой можно вернуться)
    1ba8186d879d46ff85ea7c1e192328e2.png
    git chery-pick idea - забрать коммиты из ветки idea
    2717e3091f644ef2954aa2de4514f446.png
    Ответ написан
    2 комментария
  • Как в XSD схеме указать обязательность отдельного элемента?

    gluck59
    @gluck59 Автор вопроса
    Виртуальный глюк
    Ответ на вопрос найден здесь.
    2.2.1 Ограничение вхождений

    Задача решается через жопу: нужно задать НЕобязательность НЕобязательности :) элементов, установив параметры minOccurs=0 и maxOccurs=1.
    Остальные элементы по умолчанию считаются обязательными.
    Ответ написан
    Комментировать
  • Что выгоднее - встроенный Tomcat или отдельный?

    @protven
    Вы совершаете типичную ошибку новичка, вместо того чтобы учить спринг, начинаете задаваться вопросом-
    "А что выгоднее <тут какой-то абстрактный вопрос, который нужно решать уже в боевом проекте>".
    В целом это такой себе вариант проявления прокрастинации.

    У вас сейчас есть дефицит памяти при деплое ? Если да, то докупите памяти, она стоит копейки или не запускайте много экземпляров приложения и продолжайте учить спринг.
    Если нет, то продолжайте учить спринг.

    PS Разница есть, и она в пользу одного Томката на несколько приложений. Но разница ничтожная. Использовать ембеддед контейнеры сервлетов выгоднее с точки зрения микро-сервисной архитектуры. Но вам это сейчас не нужно.
    Ответ написан
    2 комментария
  • Какие еще есть способы вынесения property данных из приложения в Tomcat?

    piatachki
    @piatachki
    Откуда душе угодно. Реализуете свой CustomProperties и всё, конец истории.

    Прим. www.opencodez.com/java/how-to-load-application-pro...
    Ответ написан
    Комментировать
  • Полезно ли при обучении изобретать велосипеды?

    Stalker_RED
    @Stalker_RED
    Да, при обучении полезно делать что-то самостоятельно. Если вы самостоятельно можете составить алгоритм, это лучше чем сдаться не найдя подходящий готовый. Но при этом стоит помнить, что многие алгоритмы отточенные крутыми профессионалами могут уделывать вашу самоделку по скорости в разы, в десятки раз, а иногда и на много порядков.

    Так что если вы внезапно осознали что вот к этой задаче можно применить воон тот алгоритм из книжки - применяйте его.

    В качестве иллюстрации приведу сравнение девяти алгоритмов сортировки:
    https://youtu.be/ZZuD6iUe3Pc
    И двух алгоритмов поиска пути
    https://www.youtube.com/watch?v=g024lzsknDo
    Ответ написан
    Комментировать
  • Как добавить рекламу в Android приложение?

    @YuryBorodkin
    Android dev
    Адмоб https://developers.google.com/admob/android/quick-start
    файрбэйз - https://firebase.google.com/docs/android/setup
    Оба сейчас гуглу принадлежат, у них интеграции есть. Можно внешний вид рекламы настроить,.
    Ответ написан
    1 комментарий
  • Spring Security. Как реализовать BaseAuth аутентификацию без появления нативного окна браузера?

    При запросе с фронтенда вам нужно передавать Header "Authorization: Basic token", где token = user:password в Base64. Сгенерировать токен можно такой командой:
    echo -n "user:password" | base64
    Далее, запрос с помощью curl:
    curl -i -H 'Authorization: Basic dXNlcjpwYXNzd29yZA==' http://localhost:8080/
    Ответ написан
    3 комментария
  • Spring Security. Как реализовать BaseAuth аутентификацию без появления нативного окна браузера?

    @SergiiSl
    чтоб окно не появлялось, можно на стороне бэка убрать http-basic и использовать аутентификацию формой...а если только на стороне фронта, то с каждым запросом нужно разрешить передавать учетные данные(заголовок , куки)
    fetch('https://example.com', {
      credentials: 'include'  
    })
    Ответ написан
    Комментировать
  • Как создать запрос в Spring Data Jpa с условием что поле равно null?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    SQL не позволяет сравнивать что-либо с NULL. Поэтому так:
    interface DaraRepository extends CrudRepository<Data, Long> {
        List<Data> findBySync(Boolean sync);
        List<Data> findBySyncIsNull();
    }

    Можно ещё так попробовать, но не знаю будет ли работать
    import org.springframework.lang.Nullable;
    
    interface DaraRepository extends CrudRepository<Data, Long> {
        List<Data> findBySync(@Nullable Boolean sync);
    }

    Не знаю зачем вы используете нестандартные имена методов репозитория и вручную пишите запросы, но если нужно, то выглядеть будет так
    @Query("from Data data where data.sync is null")
    Ответ написан
    1 комментарий
  • Разъяснение в конфигурации Spring+Hibernate(JPA). Помощь в настройке транзакций. Почему они не проходят?

    zolt85
    @zolt85
    Программист
    Я вам не скажу за всю Одессу, но у нас в Сибири считается, что
    1) @GeneratedValue(strategy = GenerationType.TABLE) - говорит, что нужно использовать таблицу для генерации PK. Не таблицу, на которую маппится сущность, а просто таблицу. Отсюда и возникает таблица hibernate_sequences. И возникает она из-за hibernate.hbm2ddl.auto=update.
    2) Про длину колонки, это опять из-за hibernate.hbm2ddl.auto=update.
    3) @Transaction говорит, что метод будет транзакционным. Что это значит. Это значит, что вызов метода будет обернут в proxy объект, у которого будет сессия, и при вызове всех вложенных методов эта сессия будет одна и та же, и при завершении метода транзакция закроется.
    4) propagation = Propagation.REQUIRED - это означает, что наличие сессии при вызове метода обязательно, если ее нету, то hibernate попытается ее создать.
    5) Откат транзакции (rollbak грубо говоря) происходит, по-умолчанию, только в случае возникновения RuntimeException, как этим управлять написано в документации к hibernate.
    6) значение в аннотации @Repository("personDao") задает имя бина.

    Теперь по классике надо что-то по советовать. Советую Вам не использовать hibernate.hbm2ddl.auto=update. Лучше посмотрите в сторону liquibase для управления состоянием БД.
    И почитайте вводные туториалы по Spring, разберитесь как работает IoC в Spring, как работает AOP в Spring, как Spring управляет бинами. И тогда Вам станет все понятно.

    Дерзайте, удачи Вам!
    Ответ написан
    1 комментарий
  • Что почитать про JPA Hibernate?

    EugeneP2
    @EugeneP2
    Java Dev
    Про JPA на русском можно почитать в книги Изучаем Java EE 7. Там 3 главы, в принципе не плохо.

    На английском языке Pro JPA 2

    Хороший набор уроков, на английском Hibernate and Java Persistence API (JPA) Fundamentals


    + конечно документация hibernate
    Ответ написан
    2 комментария
  • Как учить java ee?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Берёте учебник и сначала изучаете java core. Потом берёте другие учебники и изучаете java ee. В программировании, особенно enterprise, скорее быть не должно.
    Ответ написан
    Комментировать