Про работу Maven с локальным и удаленным репозиторием.
Все то же самое что на картинке - но языком аналогий.
Представь что ты готовишь кесадилью (ага, открываем сезон мексиканских блюд).
И по рецепту (pom.xml) для твоего Проекта Кесадилья тебе нужны ингредиенты - зависимости:
Где их искать? Можно порыться у себя в холодильнике (❄️локальный репозиторий). А если в холодильнике нет сыра? Идем за сыром в супермаркет (🛒удаленный репозиторий).
И приготовив кесадилью - остатки - например сыр - мы кладем обратно в холодильник, т.е. он у нас остается про запас в ❄️локальном репозитории.
Прелесть библиотеки в том что она не испортится в холодильнике (❄️локальном репозитории) и не закончится - ее для сборок можно использовать сколько угодно раз. И если она есть у нас локально - в сеть за ней мы уже не пойдем.
Т.е. в отличии от реального мира - в мире Maven достаточно "купить" сыр один раз что бы он всегда был и никогда не закончился🥲🥲🥲*звуки зависти
Все то же самое что на картинке - но языком аналогий.
Представь что ты готовишь кесадилью (ага, открываем сезон мексиканских блюд).
И по рецепту (pom.xml) для твоего Проекта Кесадилья тебе нужны ингредиенты - зависимости:
<dependencies>
<dependency>🌮тортилья</dependency>
<dependency>🧀сыр</dependency>
<dependency>🥩мясо</dependency>
<dependency>🍅помидор</dependency>
<dependency>🧅лук</dependency>
<dependency>🌶перец</dependency>
</dependencies>
Где их искать? Можно порыться у себя в холодильнике (❄️локальный репозиторий). А если в холодильнике нет сыра? Идем за сыром в супермаркет (🛒удаленный репозиторий).
И приготовив кесадилью - остатки - например сыр - мы кладем обратно в холодильник, т.е. он у нас остается про запас в ❄️локальном репозитории.
Прелесть библиотеки в том что она не испортится в холодильнике (❄️локальном репозитории) и не закончится - ее для сборок можно использовать сколько угодно раз. И если она есть у нас локально - в сеть за ней мы уже не пойдем.
Т.е. в отличии от реального мира - в мире Maven достаточно "купить" сыр один раз что бы он всегда был и никогда не закончился🥲🥲🥲*звуки зависти
🔥8👍6❤1😁1
"Что лежит в его мерзких грязных карманцах?"
(с) Голлум, Властелин колец
Пороемся в карманах у браузера - где и что он хранит - и разберем cookies, sessionStorage & localStorage.
Про куки мы уже говорили в одном из постов выше. Вкратце - это небольшие файлы, которые сервер подкладывает в наш браузер что бы помнить кто ты, что ты, и какие настройки используешь. Куки отправляются сайту с каждым запросом к этому сайту.
📦localStorage - долгосрочное хранилище данных. Данные из localStorage доступны из любого окна/вкладки и хранятся до тех пор пока ты сам или веб приложение их не удалит. Т.е. localStorage похож на браузерный кеш - только хранит не скрипты, стили и картинки - а данные.
🖼Пример из жизни - Youtube хранит уровень громкости видео в localStorage (по ключу yt-player-volume), а раз localStorage доступен для всех вкладок и окон - то поэтому по умолчанию каждое новое открытое окно ютюба будет иметь одинаково выставленный уровень громкости.
🔒Доступ - через DevTools (вкладка Application) или через JS:
localStorage.setItem('имяКлюча', 'значение'); //запись
localStorage.getItem('имяКлюча'); //чтение📦sessionStorage - временное хранилище данных. Данные хранятся только пока ты находишься на конкретном сайте в конкретной вкладке. Как только ты покинешь сайт или закроешь вкладку - пиши пропало. Это типа буфера обмена, или временных заметок на полях для веб-приложений.
🖼Пример из жизни - Amazon при оформлении заказа может хранить данные из заполненных форм именно тут - что бы если пользаку после заполнения адреса доставки вдруг приспичило вернуться на предыдущий шаг - данные уже заполненного адреса не оказались потеряны. А Netflix - сохранит в sessionStorage текущую отметку времени просмотра видоса, так что при обновлении страницы ты не упадешь в самое начало серии а продолжишь просмотр оттуда где прервался. А еще с помощью sessionStorage запомнит что показывал те или иные рекомендации что бы не бесить по 10 раз подряд всплывашкой с рекомендацией одного и того же сериала.
🔒Доступ - через DevTools (вкладка Application) или через JS:
sessionStorage.setItem('имяКлюча', 'значение'); //запись
sessionStorage.getItem('имяКлюча'); //чтениеВ основе sessionStorage & localStorage так же как и у кук - лежит доменная модель. Т.е. каждому сайту - свой огород, свое пространство. Поэтому не удивляйся когда увидишь во вкладке дев тулов Local storage и Session storage по несколько хранилищ каждого из типов - каждый из сайтов будет иметь свое и в то же время не будет иметь доступа к "чужим" хранилищам, хранилищам других сайтов.
📦Для особо тяжелых (ресурсоемких) случаев - есть еще и IndexedDB - встроенная в браузер база данных (присутствует и в Chrome, и в Firefox, и в Safari). Там размер не фиксирован 5 или 10 мегабайтами и может достигать до 20% от свободного дискового пространства, а иногда и больше.
🖼Пример из жизни - та же гугл почта или гугл доки будут хранить копию данных в indexedDB, что позволит продолжить с ними работу даже при потере интернет-соединения. А при возврате коннекта - локально внесенные изменения в indexedDB тут же подтянутся на сервер, в облако.
___
P.S. огоньки🔥, сердечки❤️ и репосты📩 очень помогают каналу и заряжают мою батарейку на дальнейшее творчество и контент😉😇
4🔥16❤6👍1🙏1
В детстве ты наверняка собирал вкладыши из жвачки, типа турбо или love is. Или играл в настолки где можно собрать себе колоду карт самых мощных и дерзких персонажей.
Но ура - теперь ты взрослый! Пришло время собрать колоду дерзких паттернов проектирования😄 Ими тоже можно играть, просто временами будет не так весело🥲
Начну серию постов и выложу первую карту - 6♦️ - паттерн Utility-класс.
🛠Utility-класс - это класс который содержит набор статических методов. Создание объектов такого класса запрещено.
🎯Задача такого класса - сгруппировать в кучку методы которые делают что-то общее, например работают с файлами, или парсят строки во что-то более осмысленное, или генерят случайные значения. Одного поля ягоды короче. Такой класс - это типа ящика для инструментов где лежат методы молоток(), гаечный ключ() и пила().
🗒Правила создания Utility-класса:
- private конструктор для невозможности создания объектов класса
- только статические методы
- нет состояния (нестатических полей)
- класс помечен как final
- минимум переменных класса, т.е. static-полей (лучше делать их константами через final)
Либо можно этот талмуд правил заменить одной аннотацией библиотеки lombok - проставить
Ты стопроц уже сталкивался с такими классами. Их примеры из родного JDK:
А еще вот эти библиотечные ребята (они следуют _почти_ всем правилам Utility-класса - за исключением отсутствия приватного конструктора):
P.S. Кстати, у меня часто было такое что я сначала писал код, а потом узнавал что это оказывается "паттерн"😄 т.е. приходил к правильной структуре кода интуитивно. А ты пользуешься паттерном Utility у себя в коде? Поделись в комментах - что делает твой Utility-класс.
#колода_паттернов #паттерн #java
Но ура - теперь ты взрослый! Пришло время собрать колоду дерзких паттернов проектирования😄 Ими тоже можно играть, просто временами будет не так весело🥲
Начну серию постов и выложу первую карту - 6♦️ - паттерн Utility-класс.
🛠Utility-класс - это класс который содержит набор статических методов. Создание объектов такого класса запрещено.
🎯Задача такого класса - сгруппировать в кучку методы которые делают что-то общее, например работают с файлами, или парсят строки во что-то более осмысленное, или генерят случайные значения. Одного поля ягоды короче. Такой класс - это типа ящика для инструментов где лежат методы молоток(), гаечный ключ() и пила().
🗒Правила создания Utility-класса:
- private конструктор для невозможности создания объектов класса
- только статические методы
- нет состояния (нестатических полей)
- класс помечен как final
- минимум переменных класса, т.е. static-полей (лучше делать их константами через final)
Либо можно этот талмуд правил заменить одной аннотацией библиотеки lombok - проставить
@UtilityClass над классом - и все нужные модификаторы волшебным образом прибегут в твой класс.Ты стопроц уже сталкивался с такими классами. Их примеры из родного JDK:
java.lang.Math
java.util.Arrays
java.util.Objects
java.nio.file.Files
java.util.Collections
А еще вот эти библиотечные ребята (они следуют _почти_ всем правилам Utility-класса - за исключением отсутствия приватного конструктора):
org.testng.Assert
org.junit.jupiter.api.Assertions
org.assertj.core.api.Assertions
P.S. Кстати, у меня часто было такое что я сначала писал код, а потом узнавал что это оказывается "паттерн"😄 т.е. приходил к правильной структуре кода интуитивно. А ты пользуешься паттерном Utility у себя в коде? Поделись в комментах - что делает твой Utility-класс.
#колода_паттернов #паттерн #java
2👍7🔥4❤1
UnreachableBrowserException, SessionNotCreatedException, WebDriverException, NoSuchSessionException, TimeoutException...
Каждое из этих исключений приходит так же редко и внезапно, как и спам-письмо с завещанием миллионов долларов от нигерийского принца. Правда в отличии от нигерийского принца этим ребятам нужен не номер и CVC код твоей банковской карты. Им нужны твои нервы и человекодни потраченного времени на отладку и выяснение причин их возникновения.
Я собрал первую версию памятки того, как следует отлаживать такого рода инфраструктурные проблемы. В выполнении UI-автотестов задействовано множество слоев и множество нюансов, поэтому я постарался свести их в цельную картинку. За скобками на этой схеме остается всякая тривиальщина типа неправильных локаторов и ожиданий и
NoSuchElementException - с этим исключением я думаю ты прекрасно знаешь как бороться.Поэтому обязательно пиши в комментах свои мысли, кейсы, дополнения и предложения к этой схемке! А еще лучше - поделись с другом или репостни
#java #ui #web #автотесты #selenium #selenide
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍8🔥3❤1
В понедельник бывает нелегко.
Поэтому начни день с приятного - ткни случайную картинку и узнай какой ты кот🐈🐈⬛
#мемасы
Поэтому начни день с приятного - ткни случайную картинку и узнай какой ты кот🐈🐈⬛
#мемасы
😁10❤4🔥1
📅 12 сентября.
🖥 256й день года.
👨🏼💻 День программиста!
Желаю тебе:
По случаю праздника - JVM и компиляторы свалили на выходной. А тебе оставили подарок🎁. Код-загадка на картинке. Её придется решить без их помощи. Но ведь тебя и твой острый аналитический ум это не остановит?
Голосуй за правильные ответы в опроснике ниже.
#java #quiz
🖥 256й день года.
👨🏼💻 День программиста!
Желаю тебе:
health++; //побольше здоровья
happiness++; //побольше счастья
compileAndRuntimeErrors--; //поменьше проблем с кодом
По случаю праздника - JVM и компиляторы свалили на выходной. А тебе оставили подарок🎁. Код-загадка на картинке. Её придется решить без их помощи. Но ведь тебя и твой острый аналитический ум это не остановит?
Голосуй за правильные ответы в опроснике ниже.
#java #quiz
❤4🔥2👍1
Какими могут быть результаты выполнения этого кода? (возможен один или несколько вариантов)
Ответ будет опубликован позднее в комментах.
Ответ будет опубликован позднее в комментах.
Anonymous Poll
13%
про
13%
стр
13%
Результат: null
13%
Ошибка компиляции
6%
StringIndexOutOfBoundsException
48%
Результат: про
3%
null
10%
NullPointerException
45%
Результат: стр
JSON-документы можно встретить при тестировании почти любого слоя приложения - и в юнитах, и в API, и в UI. Их дофига и они вездесущи. Так как же работать с JSON-ами не обжигая руки и пятую точку?🔥 Делюсь парочкой полезных инструментов.
📊 1. Визуализация JSON - JSONCrack
Как увидеть вместо json-простыни на 1000 строк вменяемое и понятное человеческому глазу представление данных, со всеми уровнями вложенности? На странице по ссылке в левой части есть текстовый редактор - вставляем в него свои json-данные. Справа - окошко в котором наслаждаемся результатом и получившейся диаграммой.
Минутка информационной безопасности! Не забывайте что это сторонний сервис и JSON-ы которые вы туда вставляете - лучше предварительно очищать от всяких секретностей, кредов и урлов. От греха подальше.
🏭 2. Конвертер JSON в POJO-класс
Дано: JSON.
Что надо: создать на его основе POJO-класс, модель для данных, со всем тем набором, именами и типами полей что есть у входного JSON. Мы - избалованные Java-бояре и вариант набирать класс ручками выбрасываем, что остается?
Есть сайты где это можно сделать онлайн. В одно поле вставили, нажали кнопку, из другого забрали результат:
Например тут.
Или тут.
А еще есть плагин для идеи если бегать между окнами браузера и идеи не вариант.
После установки плагина в проектном дереве кликаемкартошку напитки соусы нужные нам при генерации классов опции.
🛠 3. Генерация JSON-схемы на базе POJO.
Схема - это документ с набором правил для json данных. Схема позволяет быстро провалидировать JSON-документ - соответствует он правилам схемы или нет. В схеме можно описать структуру документа, имена обязательных полей документа, уровни вложенности, типы данных и многое другое. Так вот - есть сайт что бы на лету создать JSON-схему из твоих JSON данных.
Сайт визуально очень похож на приведенные выше - окошко для вставки JSON, волшебная кнопка заставляющая цифровых гномов работать и окошко результата откуда можно забрать сгенеренный документ JSON-схемы.
Если знаешь еще что-то крутое из таких инструментов - шепни на ухо в комментах😉
#java #ui #api #web #автотесты
📊 1. Визуализация JSON - JSONCrack
Как увидеть вместо json-простыни на 1000 строк вменяемое и понятное человеческому глазу представление данных, со всеми уровнями вложенности? На странице по ссылке в левой части есть текстовый редактор - вставляем в него свои json-данные. Справа - окошко в котором наслаждаемся результатом и получившейся диаграммой.
Минутка информационной безопасности! Не забывайте что это сторонний сервис и JSON-ы которые вы туда вставляете - лучше предварительно очищать от всяких секретностей, кредов и урлов. От греха подальше.
🏭 2. Конвертер JSON в POJO-класс
Дано: JSON.
Что надо: создать на его основе POJO-класс, модель для данных, со всем тем набором, именами и типами полей что есть у входного JSON. Мы - избалованные Java-бояре и вариант набирать класс ручками выбрасываем, что остается?
Есть сайты где это можно сделать онлайн. В одно поле вставили, нажали кнопку, из другого забрали результат:
Например тут.
Или тут.
А еще есть плагин для идеи если бегать между окнами браузера и идеи не вариант.
После установки плагина в проектном дереве кликаем
ПКМ - New - Generate POJO from JSON. В окошке выбираем 🛠 3. Генерация JSON-схемы на базе POJO.
Схема - это документ с набором правил для json данных. Схема позволяет быстро провалидировать JSON-документ - соответствует он правилам схемы или нет. В схеме можно описать структуру документа, имена обязательных полей документа, уровни вложенности, типы данных и многое другое. Так вот - есть сайт что бы на лету создать JSON-схему из твоих JSON данных.
Сайт визуально очень похож на приведенные выше - окошко для вставки JSON, волшебная кнопка заставляющая цифровых гномов работать и окошко результата откуда можно забрать сгенеренный документ JSON-схемы.
Если знаешь еще что-то крутое из таких инструментов - шепни на ухо в комментах😉
#java #ui #api #web #автотесты
3🔥8❤1🙏1