Перейти до основного вмісту

Публікації

Показано дописи з міткою "програмування"

Створення проєкту на TypeScript, модулі

Крок 1. Ініціалізація проєкту Спочатку створимо нову теку та ініціалізуємо Node.js-проєкт за допомогою npm : mkdir my-typescript-app cd my-typescript-app npm init -y Крок 2. Встановлення TypeScript Додаємо TypeScript як dev-залежність: npm install --save-dev typescript ts-node @types/node - typescript — компілятор TypeScript - ts-node — дозволяє запускати TS-файли без попередньої компіляції - @types/node — типи для стандартних Node.js API Крок 3. Створення файлу tsconfig.json Ініціалізуємо конфігурацію TypeScript: npx tsc --init Приклад файлу tsconfig.json { "compilerOptions": { "target": "ES2020", // Версія JS у вихідному коді "module": "CommonJS", // Система модулів (для Node.js) "rootDir": "src", // Вхідна папка з TypeScript-кодом "outDir": "dist", // Куди компілюється код JS "str...

Основи Next.js

Що таке Next.js? Next.js — це прогресивний фреймворк для розробки веб-застосунків на основі React. Він розширює можливості React, додаючи готову інфраструктуру для Server-Side Rendering (SSR), генерації статичних сторінок, маршрутизації через файлову систему, а також можливість створювати backend-ендпоінти прямо в проєкті. Чому він став популярним? Next.js швидко здобув популярність завдяки тому, що пропонує: SEO-дружні сторінки завдяки SSR / SSG; швидкий перший рендер (First Page Load); просту маршрутизацію без налаштування; розгортання в один клік через Vercel; вбудовану оптимізацію зображень та продуктивності. Чим відрізняється від класичного React У класичному React ми отримуємо лише клієнтську бібліотеку для побудови UI-компонентів. Усе інше (SSR, маршрути, API) треба налаштовувати вручну або через сторонні бібліотеки (наприклад, React Router, Redux, Express, etc.). Next.js — це уже повноцінний фреймворк. Він одразу має: серверний рендеринг...

Інструменти для роботи з Node.js

Що таке npm? npm (Node Package Manager) — це офіційний пакетний менеджер для Node.js . Він дозволяє: Встановлювати сторонні бібліотеки та фреймворки Керувати залежностями проєкту Запускати скрипти (команди) через package.json Приклад ініціалізації проєкту з npm npm init -y Файл package.json (скорочений приклад) { "name": "my-project", "version": "1.0.0", "scripts": { "start": "ts-node src/index.ts", "build": "tsc" }, "dependencies": { "express": "^4.18.0" }, "devDependencies": { "typescript": "^5.0.0", "ts-node": "^10.0.0" } } Що таке tsconfig.json? tsconfig.json — це файл конфігурації для компілятора TypeScript, який визначає, як слід компілювати код. Приклад файлу tsconfig.json { "compilerOptions": { "target": "ES2020...

Основи Node.js

Що таке Node.js? Node.js — це середовище виконання JavaScript поза браузером, побудоване на рушії Google V8 . Воно дозволяє запускати JavaScript на сервері, створюючи серверні застосунки з високою продуктивністю. Основні характеристики: Однопотокова модель з неблокуючим I/O Асинхронне виконання за допомогою event loop Висока продуктивність у роботі з мережевими запитами npm — найбільший реєстр пакетів Що таке event loop? Event loop — це механізм в Node.js, який дозволяє неблокуючим асинхронним операціям виконуватись у середовищі з єдиним потоком. Він постійно перевіряє наявність подій у черзі та викликає відповідні колбеки. Як працює однопоточність у Node.js? Node.js використовує один потік (main thread) для обробки JavaScript-коду. Операції, які займають час (мережеві запити, читання з файлової системи), делегуються до системних API або thread pool, і після завершення результат повертається у основний потік через event loop. Приклад: асинхронна о...

Прості типи даних в Elixir

Мова Elixir має низку простих (примітивних) типів даних, які часто використовуються в повсякденному програмуванні. Числа Elixir підтримує цілі (integer) та дійсні числа (float). # Цілі числа a = 42 b = -7 # Дійсні числа c = 3.14 d = -0.001 Булеві значення Elixir має два булевих значення: true та false . x = true y = false z = x and y # false Атоми Атоми — це константи з іменем, що починається з двокрапки. Вони широко використовуються, наприклад, для імен параметрів або станів. :ok :error :running :elixir_is_fun Рядки Рядки в Elixir — це двійкові дані з кодуванням UTF-8, оголошуються в подвійних лапках. name = "Pavlo" greeting = "Привіт, #{name}!" Nil Nil — це спеціальне значення, що позначає "відсутність значення". value = nil is_nil(value) # true Бінарні дані та байти Бінарні дані оголошуються в подвійних лапках або як бінарні літерали. string = "Привіт" # це рядок, але також бінарні дані binary = ...

Створення нового Elixir-проєкту

Для створення новго Elixir-проєкту можна використати команду mix new first_project --sup Зрозуміло, що Elixir має бути встановлений раніше. Пояснення команди: mix — це вбудований інструмент для управління проєктами в Elixir (аналог maven у Java чи npm у JavaScript ). new — підкоманда mix, яка створює новий проєкт. first_project — назва твого нового проєкту. Папка з цією назвою буде створена у поточному каталозі. --sup — опціональний прапорець, який додає шаблон структури з Supervision Tree. Це означає, що створений проєкт одразу буде мати структуру, яка підтримує супервізор (супервізор керує життєвим циклом процесів у системі, перезапускаючи їх при падінні). Щоб створити файл з тестом, можна запустити команду із директорії проєкту mix test Приблизний вигляд структури проєкту:

Робота SpringBoot 3 з базою даних Redis

Redis Redis (Remote Dictionary Server) — це in-memory база даних ключ-значення з відкритим вихідним кодом, що використовується для зберігання структурованих даних. Вона підтримує різні типи даних, такі як рядки, списки, множини, упорядковані множини з діапазонами, хеші, бітові масиви, потоки і т. д. Redis широко використовується для кешування, управління сесіями, систем обміну повідомленнями, черг задач та інших сценаріїв, що вимагають високої продуктивності і низької затримки. Redis з SpringBoot Розглянемо простий проєкт на SpringBoot, що використовує Redis, як базу даних. Створимо такий проєкт: Створимо entity Cat: import lombok.Data; import org.springframework.data.annotation.Id; import org.springframework.data.redis.core.RedisHash; @Data @RedisHash("cat") public class Cat { @Id private String id; private String name; private Integer age; public Cat(String name, Integer age) { this.name = name; this.age = age; } } Звер...

Spring Boot Actuator

Actuator в Spring Boot - це бібліотека, яке надає різноманітну інформацію про стан вашого застосунку і його компонентів. Він дозволяє легко моніторити застосунок в режимі реального часу. Основні можливості actuator включають: Стан застосунку (/actuator/health): Цей ендпоінт повертає інформацію про стан застосунку. Це може бути корисно для моніторингу системи та виявлення будь-яких проблем. Інформація про стан містить загальну інформацію про стан. Інформація про середовище (/actuator/env): Цей ендпоінт надає доступ до інформації про середовище, в якому працює ваш застосунок. Ви можете отримати доступ до системних властивостей, змінних середовища, налаштувань ініціалізації та іншої важливої інформації. Метрики (/actuator/metrics): Цей ендпоінт надає статистику про різні показники застосунку, такі як кількість HTTP-запитів, використання пам'яті, кількість з'єднань з базою даних, час відповіді тощо. Ви можете використовувати ці метрики для аналізу продуктивності вашог...

Проблема при запуску Liquibase на Digital Ocean та її вирішення

Нещодавно зустрівся з такою проблемою: SpringBoot-проєкт не запустився на сервері через проблему пов’язану з Liquibase. Детальніше про проєкт Сам проєкт повністю написаний на SpringBoot, база даних на MySQL, міграція здійснюється за допомогою Liquibase. Проєкт відносно невеликий і локально запускався і працював без проблем. Але при запуску на продакт-сервері отримувалася помилка: ERROR org.springframework.boot.SpringApplication [main] Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class]: Invocation of init method failed; nested exception is liquibase.exception.DatabaseException: Unable to create or change a table without a primary key, when the system variable 'sql_require_primary_key' is set. Add a primary key to the table or unset this variable to avoid this me...

Знайомство з фреймворком Quarkus

Quarkus Quarkus - реактивний java-фреймворк, який підтримує GraalVM. Розглянемо створення стартового застосунку на Quarkus в операційній системі Ubuntu (для інших версій Linux команди будуть такими ж, для Windows можуть бути невеликі відмінності). Підготовка На машині має бути встановлений Maven. Перевірити це можна за допомогою команди: mvn --version Встановити Maven можна, використавши наступну команду: sudo apt install maven Створення стартового проєкту В потрібній директорії запустити в командному рядку код: mvn io.quarkus.platform:quarkus-maven-plugin:2.11.2.Final:create \ -DprojectGroupId=org.acme \ -DprojectArtifactId=getting-started \ -Dextensions="resteasy-reactive" cd getting-started Буде створений стартовий проєкт. Цеq проєкт можна відкрити за домогою улюбленого IDE. Не рахуючи тестів, у цьому проєкті є лише один java-клас: package org.acme; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs...

Оператор CNOT в квантовому програмуванні

CNOT Оператор (вентиль, гейт) CNOT приймає 2 входи і 2 виходи. Цей вентиль називають контрольованим запереченням (Controlled NOT). CNOT інвертує другий (керований) кубіт тільки, якщо на перший (керуючий) кубіт подано 1: До Після Керуючий кубіт Керований кубіт Керуючий кубіт Керований кубіт 0 0 0 0 0 1 0 1 1 0 1 1 1 1 1 0 Робота оператора схожа на оператор XOR, якщо не враховувати перший біт на виході: XOR Вхід 1 Вхід 2 Виіхід 0 0 0 0 1 1 1 0 1 1 1 0 Приклад реалізації в Strange Program program = new Program(8); Step step0=new Step(); Step step1=new Step(); step0.addGate(new X(3)); step0.addGate(new X(4)); step0.addGate(new X(6)); step0.addGate(new X(7)); step1.addGate(new Cnot(0,1)); step1.addGate(new Cnot(2,3)); step1.addGate(new Cnot(4,5)); step1.addGate(new Cnot(6,7)); program.addStep(step0); program.addStep(step1); QuantumExecutionEnvironment qee = new SimpleQuantumExecutionEnvironment(); Result result = qee.run...

Квантове програмування в Java

Strange Strange - бібліотека для емуляції квантових обчислень на Java. Бібліотека також дозволяє досить просто візуалізувати написану квантову програму за допомогою JavaFX. Підключення бібліотеки При використанні Maven це можна зробити, додавши залежність: org.redfx strange 0.1.3 Написання простої програми Приклад простої програми, код можна помістити прямо в метод main() : Program program = new Program(3); Step s0 = new Step(); s0.addGate(new X(0)); Step s1 =new Step(); s1.addGate(new Hadamard(2)); program.addStep(s0); program.addStep(s1); QuantumExecutionEnvironment qee = new SimpleQuantumExecutionEnvironment(); Result result = qee.runProgram(program); Qubit[] qubits = result.getQubits(); for (Qubit qubit:qubits){ System.out.println(qubit.measure()); } Після запуску програма має видати результат 1 0 0 або 1 0 1 Пояснення програми Створення програми, що буде оперувати 3-ма кубітами: Program program =...