Source Code
197 subscribers
30 photos
3 files
80 links
Download Telegram
#backEnd
Кто этот ваш Postman?

Postman – удобный инструмент, который умеет описывать и исполнять запросы, получать информацию об их статусах, выстраивать цепочки запросов, зацикливать их, создавать сценарии. Главный плюс – код писать при этом практически не нужно.

Итак, вы определились со сценариями, которые хотите мониторить, и подготовили список запросов, которые соответствуют действиям пользователя. В Postman сценарии собираются из этих запросов, как из конструктора. Помимо запросов, такими кирпичиками являются коллекции и окружения.

Окружения содержат значения переменных, с которыми мы работаем в рамках сценариев – адреса серверов, имена папок и т.д. Фактически одно окружение – это один продукт.

Коллекция описывает, что с этими переменными делать. Это набор запросов, и в нашем случае одна коллекция – это один сценарий мониторинга. Одну коллекцию можно использовать в разных окружениях, подставляя нужные переменные. Не нужно для каждой системы писать новый сценарий авторизации – можно одним кликом вызвать уже готовую коллекцию.

Надо тестить API - Postman
#backEnd #definition
Что такое ETL?

Начнем с определения: ETL (Extract, Transform, Load) – это совокупность процессов управления хранилищами данных, включая:

Извлечение данных из внешних источников (таблицы баз данных, файлы);
Преобразование и очистка данных согласно бизнес-потребностям;
Загрузка обработанной информации в корпоративное хранилище данных (КХД).

Прикладное назначение ETL состоит в том, чтобы организовать такую структуру данных с помощью интеграции различных информационных систем. Учитывая, что BI-технологии позиционируются как «концепции и методы для улучшения принятия бизнес-решений с использованием систем на основе бизнес-данных», можно сделать вывод о прямой принадлежность ETL к этому технологическому стеку.
#backEnd

Docker — это платформа, которая предназначена для разработки, развёртывания и запуска приложений в контейнерах. Слово «Docker» в последнее время стало чем-то вроде синонима слова «контейнеризация». И если вы ещё не пользуетесь Docker, но при этом работаете или собираетесь работать в сферах разработки приложений или анализа данных, то Docker — это то, с чем вы непременно встретитесь в будущем.

Предшественниками контейнеров Docker были виртуальные машины. Виртуальная машина, как и контейнер, изолирует от внешней среды приложение и его зависимости. Однако контейнеры Docker обладают преимуществами перед виртуальными машинами. Так, они потребляют меньше ресурсов, их очень легко переносить, они быстрее запускаются и приходят в работоспособное состояние.
#Spring #java #backEnd
Релиз Spring Native Beta

Недавно
команда, занимающаяся портированием Spring для GraalVM, выпустила первый крупный релиз - Spring Native Beta. Вместе с создателями GraalVM они смогли пофиксить множество багов как в самом компиляторе так и спринге. Теперь у проекта появилась официальная поддержка, свой цикл релизов и его можно щупать.

Согласно документации, ключевые различия между обычным JVM и нативной реализацией заключаются в следующем:

Статический анализ всего приложения выполняется во время сборки.

Неиспользуемые компоненты удаляются во время сборки.

Рефлексия, ресурсы и динамические прокси могут быть настроены только с помощью дополнительных конфигураций.

На время сборки фиксируются все компоненты в Classpath.

Нет ленивой загрузки класса: при загрузке все, что поставляется в исполняемых файлах, будет загружено в память. Например, чтобы вызов Class.forName ("myClass") отработал верно, нужно иметь myClass в файле конфигурации. Если в файле конфигурации не будет найден класс, который запрашивается для динамической загрузки класса, будет выбрано исключение ClassNotFoundException

Часть кода будет запущена во время сборки, чтобы правильно связать компоненты. Например, тесты.

https://www.youtube.com/watch?v=96n_YpGx-JU
#backend #web
Реляционные и нереляционные базы данных

🔸Реляционные базы данных
используют язык структурированных запросов (SQL) для того, чтобы обрабатывать данные и управлять ими.

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

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

🔸Нереляционные базы данных, напротив, обладают гибкими схемами для неструктурированных данных. Они могут храниться по-разному: в колонках, документах, графах или в виде хранилища «ключ-значение». Эта гибкость позволяет:

▫️Создавать документы, не определяя их структуру заранее;
▫️Каждый документ может обладать собственной уникальной структурой;
▫️Синтаксис может различаться в разных базах данных;
▫️В процессе работы можно добавлять новые поля.
#hardware #backEnd
Как создатель node.js сам разочаровался в нем

Примерно
за полгода до конференции JSConf 2018 Райан Даль решил попробовать работать со своим детищем, спустя почти 10 лет с момента его создания. Нельзя сказать, что он был доволен тем, что увидел. Несомненно, проект сильно развился, но во время разработки Node.js Райан был слишком зациклен на решении проблем ввода/вывода, потому допустил некоторые ошибки, которые потом превратились в системные проблемы. Поскольку платформа стала чрезвычайно популярной, то уже поздно было что-то глобально менять, не поломав все зависимости и совместимость.

В 2011 году он устроил небольшую «пятиминутку ненависти» на Google+. Сама соцсеть давно закрыта, но интернет все помнит.

Давайте вспомним основные тезисы, которые были в нем рассмотрены:

Отсутствие Promises, от которых отказались на начальном этапе разработки.

Проблема с безопасностью. Приложение на Node.js получает доступ к локальному диску, сети и вообще ко всей системе сразу.
#backEnd #NodeJS

Релиз Node.js 16

20 апреля состоялся релиз новой 16 версии Node.js. Среди основных изменений обновление движка JavaScript V8 до версии 9.0, встроенные бинарники (двоичные файлы) для Apple Silicon и несколько API, но обо всем по порядку.

Из основных изменений движка можно назвать поддержку индексов соответствия в регулярных выражениях (regexp match indices), а также улучшение (повышение скорости) доступа к свойству «super».

Идексы соответствия позволяют разработчикам получать массив подмассивов, содержащих начальные и конечные позиции (индексы) групп захвата (capture groups) в регулярном выражении при наличии совпадения (или нескольких совпадений). Данный массив доступен через свойство «indices» объекта с совпадениями. Обратите внимание, что регулярное выражение, используемое для поиска совпадений, должно иметь флаг «/d».

const re = /(a)(b)/d // Регулярное выражение. Обратите внимание на наличие флага /d

const m = re.exec('ab') // Объект с совпадениями

console.log(m.indices[0]) // Первый подмассив — это полное совпадение

// [0, 2]

console.log(m.indices[1]) // Второй подмассив — первая группа захвата

// [0, 1]

console.log(m.indices[2]) // Третий подмассив — вторая группа захвата

// [1, 2]

Доступ к свойству «super» был улучшен за счет использования системы встроенного кэша и оптимизации генерации кода в «TurboFan» (TurboFan — это компилятор, за интепретацию кода в V8 отвечает Ignition). Как утверждают разработчики V8, скорость доступа к super стала почти такой же, как скорость доступа к обычному свойству.

Timers Promises API предоставляет альтернативный набор таймеров, возвращающих объект «Promise», что избавляет от необходимости использования util.promisify().

import { setTimeout } from 'timers/promises'

async function run() {

const greet = await setTimeout(3000, 'Hi!')

console.log(greet) // Hi!

}

run()

Timers Promises API был представлен в Node.js 15 в качестве экспериментальной возможности. Теперь он приобрел статус стабильного интерфейса.
#backEnd

Личный сервер shadowsocks за 10 минут без затрат

shadowsocks
- это шифрованный сетевой туннель, клиентская часть которого предоставляет доступ приложениям к сети как SOCKS-прокси, запущенный на этом же устройстве. В некотором смысле его можно использовать как VPN, потому что клиенты поддерживают прозрачное перенаправление трафика приложений в туннель

В этом руководстве используется замечательный проект готового приложения для Heroku, которое реализует всё необходимое автоматически.

Ссылка на GitHub проекта. https://github.com/aditya-shri/VPN

Шаг 1. Регистрация в сервисе Heroku
Для этого нужно зайти на сайт Heroku, нажать Sign up и заполнить требуемые сведения. Для регистрации нужна только электронная почта.

Шаг 2. Начало развёртывания
Нажмите на эту ссылку.
https://dashboard.heroku.com/new?template=https%3A%2F%2Fgithub.com%2Faditya-shri%2FVPN%2Ftree%2Fmain

Шаг 3. Конфигурирование
В появившейся форме заполните все поля как показано на скриншоте:

В качестве значений "App Name" и AppName впишите какое-то уникальное имя приложения, одинаковое в обоих полях. Это имя станет частью доменного имени appname.herokuapp.com, по которому станет доступен сервис.

Вместо PASSWORD задайте свой пароль. Можно задать подлиннее и понадёжнее - Вам, скорее всего, не придётся вводить его вручную.

Кроме того, желательно поменять пути QR и путь обработчика прокси V2_Path на какое-нибудь трудноугадываемое значение.

Шаг 4
Заполнив форму, нажмите Deploy app.

После завершения сборки и запуска QR-код с конфигурацией для мобильных устройств будет доступен по адресу

https://APPNAME.herokuapp.com/qr/vpn.png

а строка с конфигурацией в виде URL будет доступна по адресу

https://APPNAME.herokuapp.com/qr/

где APPNAME - выбранное Вами имя приложения. Если Вы меняли путь к QR-коду, то ссылка изменится в соответственно. Во второй ссылке косая черта на конце обязательна.

Всё, можно пользоваться!
#Spring #backEnd #java
Spring: @Component против @Bean

@Component и @Bean делают две совершенно разные вещи, и их не следует путать.

@Component (а также @Service и @Repository ) используются для автоматического обнаружения и автоматической настройки бобов с помощью сканирования classpath. Существует неявное отображение one-to-one между аннотированным классом и Бобом (то есть один боб на класс). Управление проводкой при таком подходе довольно ограничено, поскольку оно носит чисто декларативный характер.

@Bean используется для явного объявления одного компонента, а не позволяет Spring делать это автоматически, как описано выше. Он отделяет объявление Боба от определения класса.