Предварительное требование: Установи Node.js (вместе с ним автоматически установится npm).
Выполни в терминале (командной строке) следующие шаги:
# 1. Создай папку проекта и зайди в неё
mkdir my-ts-app
cd my-ts-app
# 5. Создай папку для исходников и первый файл
mkdir src
echo ‘const message: string = «Привет из TypeScript!»;console.log(message);’ > src/index.ts
Теперь открой созданный tsconfig.json и найди (или добавь) две строчки. Они скажут компилятору, где брать код и куда его складывать:
«outDir»: «./dist»,
«rootDir»: «./src»,
Открой package.json и замени секцию «scripts» на:
«scripts»: {
«build»: «tsc»,
«start»: «node dist/index.js»,
«dev»: «npm run build && npm run start»
}
Собрать проект:
npm run build # Скомпилирует TS в JS
Из каких частей состоит базовый проект
Если представить проект как мини-фабрику. То её основные «цеха» и документы это :
📦 package.json — это Паспорт проекта. Хранит имя, версию, список подключённых библиотек и команды для запуска/сборки.
⚙️ tsconfig.json — это Инструкция для компилятора. Говорит TypeScript: «Файлы кода в src/, применяй строгие проверки, сохрани готовый JS в dist/».
📁 src/ — это папка «рабочая зона». Здесь код на TypeScript. Это единственная папка, где хранится основной кож.
📁 dist/ (или build/) — это папка Готовая продукция. Сюда компилятор автоматически кладёт преобразованный JavaScript. Именно его запускает Node.js.
📦 node_modules/ — это папка «Склад библиотек». Автоматически создаётся при комнде `npm install`. Внутри тысячи файлов. Не трогай и не меняй их вручную.
📄 .gitignore — это папка «Фильтр для Git». Информирует системе контроля версий: «Не сохраняй в репозиторий node_modules/ и dist/, их всегда можно восстановить».
📖 README.md — это файл «Заметок для людей». Краткое описание: что делает проект, как его запустить, какие технологии использует.
Как всё работает вместе:
Ты пишешь код с типами в src/index.ts или других файлах в папке src.
Команда `npm run build` запускает преобразование файлов TypeScript в исполняемый код JavaScript (папка `dist`). Согласно правилам описанным в tsconfig.json, так же происходит проверка код на ошибки.
Команда `npm start` запускает этот JS-файл через Node.js, и ты видишь вывод в консоли.
В этой статье пример как загрузить несколько файлов проекта для AI модели доступной в WEB версии в формате чата. Промпт 1: Буду загружать файлы с кодом PHP для анализа и редактирования. ЗАГРУЖАЮ ФАЙЛЫ ПОЭТАПНО: 1. Сначала core файлы 2. Потом хелперы 3. Потом примеры модулей 4. В конце документацию ВАЖНО: - Не анализируй пока я не скажу "АНАЛИЗИРУЙ" - Просто подтверждай получение каждой партии файлов - Запоминай контекст СЕЙЧАС ОТПРАВЛЯЮ: 00_README_FIRST.txt и 01_MAIN_STRUCTURE.txt <Загрузить файлы кнопкой> Промпт 2: ОТПРАВЛЯЮ CORE FILES (2 файлов): - tools/core/tools.php - tools/core/modules.php Промпт 3: ОТПРАВЛЯЮ HELPERS (2 файлов): - settingsHelper.php - appHelper.php Промпт 3: ВСЕ ФАЙЛЫ ЗАГРУЖЕНЫ! # КОНТЕКСТ Я разрабатываю скрипты для .... ## ЧТО НУЖНО СДЕЛАТЬ ### 1. АНАЛИЗ .... Проанализируй загруженные файлы и ответь: A. Архитектура ... B. Создай.... .... ### 4. СОЗДАЙ НОВЫЕ ФАЙЛЫ ....
### ФОРМАТ ОТВЕТА Отвечай поэтапно: ЭТАП 1: Анализ (без кода, только текст) ЭТАП 2: Архитектурные предложения (диаграммы, списки) ЭТАП 3: Конкретный код (полные файлы) ЭТАП 4: Новые файлы (документация, промпты) ЭТАП 5: Примеры использования Если контекста не хватает задавай вопросы.
### ФОРМАТ ОТВЕТА
Отвечай поэтапно:
ЭТАП 1: Анализ (без кода, только текст) ЭТАП 2: Архитектурные предложения (диаграммы, списки) ЭТАП 3: Конкретный код (полные файлы) ЭТАП 4: Новые файлы (документация, промпты) ЭТАП 5: Примеры использования Если контекста не хватает, говори «Нужно больше информации о…» и задавай вопросы. НАЧИНАЙ С ЭТАПА 1 — АНАЛИЗ
Далее код с примером на NodeJS редактора текста с HTML форматированием. Что есть в примере: 1. Редактор в Div элементе с атрибутами dangerouslySetInnerHTML и contentEditable;
2. Кнопки реализованные специальной библиотекой contentEditable ‘lucide-react’;
3. Команды над текстом с использованием Range. Есть возможность «отката» действия форматирования при повторном нажатии
import { LucideBold, LucideEraser, LucideItalic, LucideUnderline } from 'lucide-react'
import styles from './EmailEditor.module.scss'
import { useState, useRef} from 'react'
function EmailEditor() {
const [text, setText] = useState(`Hello, Lorem ipsum dolor sit amet consectetur adipisicing elit.
Quisquam doloremque architecto ducimus quos ut distinctio accusamus molestias
sint inventore deleniti atque quia deserunt aliquid,
numquam quod impedit perspiciatis eligendi earum.`);
0) Установить приложение GIT https://github.com/git-for-windows/git/releases/download/v2.47.0.windows.2/Git-2.47.0.2-64-bit.exe 1) Сгенерировать ключ к GIT локально.
Запустить Терминал (cmd.exe)
Выполнить команду для генерации и создания пары ключей (публичного и приватного): ssh-keygen -t rsa -b 4096 -C «test@gmail.com» На вопрос о кодовой фразе можно не вводить ничего (нажать Enter). Название ключа (такое название у файлов ключа) по умолчанию: id_rsa.pub Файлы ключа SSH будут находится в папке Пользователя Windows в подпапке .ssh Например: C:\Users\Tom.ssh (Tom — это имя пользователя Windows)
2) Добавит ключ на сайт:
Проверить подключение по SSH без сложных команд: ssh -T https://gitlab.ru/
Зайти на свой сайт GITLab в раздел https://gitlab.com/-/user_settings/ssh_keys
Нажать на кнопку Add new key
Задать значение поля «Title»
Задать значение «Expiration date»
взять весь текст публичного ключа из файла C:\Users\Tom.ssh\id_rsa.pub (название файла по умолчанию) внести поле «Key» (текст в данном случае начинается с фразы «ssh-rsa»)
нажать на кнопку «Add key».
Для VS Code при первом старте потребуется в консоли ввести команды для добавления информации о текущем Пользователе Git:
git config —global user.email «test@gmail.com»
git config —global user.name «Test User»
Проверить SSH соединение после всех настроек: ssh -T https://gitlab.ru/
Пример хорошего решения для меня при использовании системной библиотеки logging. Для каждого модуля можно создавать свой логгер
import logging
import os
# Путь к файлу в котором хранится лог сообщений
logFileName = './log/log.log'
# Формат сообщения
# Пример: [07.03.2023 21:55:01] - main_process - DEBUG This is a debug message
format = '[%(asctime)s] - %(name)s - %(levelname)-8s %(message)s'
# Базовая конфигурация Ограничение уровня логирования
# формат даты сообщения
# имя файла для лога
# сообщения добавляются в файл
logging.basicConfig(level=logging.DEBUG,
format=format,
datefmt='%m.%d.%Y %H:%M:%S',
filename=logFileName,
filemode='a')
# Обработчик для трансляции в консоль
consoleHandler = logging.StreamHandler()
# Ограничение уровня логирования
consoleHandler.setLevel(logging.INFO)
formatter = logging.Formatter(format)
# Формат сообщения
consoleHandler.setFormatter(formatter)
# Добавление обработчика для трансляции в консоль в базовый (root) логер
logging.getLogger('').addHandler(consoleHandler)
# Создание именованного экземпляра логера для текущего модуля
logger = logging.getLogger('main_process')
logger.debug('This is a debug message') #DEBUG тип сообщения не будет отображаться если базовая настройка уровня логирования выше чем DEBUG
logger.warning('This is a warning message')#WARNING тип сообщения не будет отображаться если базовая настройка уровня логирования выше чем WARNING
Что выводится в консоль:
[07.03.2023 22:34:31] - main_process - DEBUG This is a debug message
[07.03.2023 22:34:31] - main_process - WARNING This is a warning message
Далее код создания отдельного именованного логгера для любого модуля
import logging
# Создание именованного экземпляра логера для текущего модуля
module_logger = logging.getLogger('spam_service.spam')
# Используем экземпляр логгера в функции
def some_function():
module_logger.info('received a call to "some_function"')
Что выводится в консоль (при вызове функции some_function):
[07.03.2023 22:34:31] - spam_service.spam - INFO received a call to "some_function"
Разберем, как можно добавить Pre-request скрипт, чтобы выполнять запрос токена (логин) и использовать его для выполнения других запросов, требующих аутентификацию с этим токеном.
Проблема
Создаем и отправляем запросы в Postman для тестирования работы с API, но каждый раз токен приходится вводить вручную. Токен вводим в первый и в последующие разы при каждом запуске, что занимает время, но понятно что есть способ использовать обширный набор инструментов Postman.
Как организована авторизация в Postman
Структура проекта в нашем случае такая: Корень проекта (в терминах Postamn называется API), Папка-коллекция (набор запросов), Папка (по названию Controller) и Запросы (описание каждого запроса, который нужно тестировать). Здесь и далее речь идет о конфигурации Папки-коллекции и ее Запросов. Настройка авторизации в запросах по умолчанию находится в значении «Inherit auth from parent». Это значит, то мы можем для всех Запросов настроить авторизацию в их родительской Папке-коллекции.
По шагам
В данном случае используем авторизации типа Bearer Token. Необходимо перед каждым запросом, который есть в Папке-Коллекции выполнять предварительный запрос аутентификации для получения Токена. Токен из ответа сервера будет помещен в переменную MyToken. Значение переменной MyToken будет использовано как токен.
1. Выбрать Папку-Коллекцию PizzaWebApi.Web;
2. Выбрать таб с настройками «Authorization» (для текущей коллекции);
3. Выберем метод авторизации Type = «Bearer Token»; 4. Выберем Token = «{{MyToken}}» (без кавычек);
5. Выбрать таб Variables; 6. Создать переменную со значение baseUrl = «http://localhost:5118» (без кавычек, стандартный порт ASP Core);
Создать бота или использовать своего существующего.
Узнать id пользователя, которому нужно послать сообщение.
Убедится, что пользователь послал хотя бы 1 сообщение боту
Как создать бота Телеграм?
Чтобы создать бота и узнать его токен (далее BOT TOKEN) и id обратитесь к статье ссылка .
Как узнать id пользователя?
Чтобы узнать id пользователя Телеграм нужно, чтобы он либо написал сообщение контакту Телеграм @getmyid_bot , либо написал сообщение вашему боту от своего имени (что предпочтительнее).
Важно: чтобы он обозначил, что это именно он, например написал в условленное время или его сообщение содержало его имя.
Важно: в документации id пользователя может/будет называться chatID .
Чтобы прочесть все сообщения полученные в адрес вашего перейдите по ссылке https://api.telegram.org/bot<BOT TOKEN>/getUpdates и получите json ответ от сервера с сообщениями. Подробнее о методе getUpdates .
Важно: сообщения хранятся на сервере Телеграм не более 24 часов, а затем удаляются. В запросе без дополнительных параметров выдается не более 100 позиций.
Код
Параметры функции:
$msg — текст сообщения на английском языке (есть проблемы кодировкой).
$chatID — id пользователя которому отсылается сообщение.
$bot_token — токен бота BOT TOKEN
$emoji_unicode — UTF код иконки для добавления в текст сообщения смайлика из библиотеки. Пример: \xF0\x9F\x94\xA5
Убедитесь, что пользователь послал хотя бы 1 сообщение этому боту иначе любые сообщения от вашего бота не будут доходить.
Forbidden: bot was blocked by the user В некоторых случаях пользователи намеренно блокируют этого бота.
400 Bad Request это может появится, если вы посылаете сообщения слишком часто, что воспринимается как спам сервером. Или с вашего IP адреса, кто то еще посылает слишком много сообщений, что бывает если вы арендуете частный хостинг.
скачать требуемый вэбдрайвер (webdriver) браузера (поддерживаемого) в зависимости от вашей OS для управления им с помощью Selenium https://selenium-python.readthedocs.io/installation.html#drivers Распаковать соответствующий файл в папку: — для Windows: C:/WebDriver\bin\phantomjs.exe — для Linux: /opt/WebDriver/bin/phantomjs В пример я использовал вэбдрайвер PhantomJS (хотя он не рекомендуется для использования), так как не он показывает окно с запускаемой программой
Для того, чтобы воспользоваться вэбдрайвером нужно установить значение системной перменной Path: — для Windows в командной строке (или в ручном режиме) : setx /m path «%path%;C:\WebDriver\bin\» — для Linux ввести в Терминале: export PATH=$PATH:/opt/WebDriver/bin >> ~/.profile Чтобы проверить получилось ли установить path введите в Теримнале команду: phantomjs (chromedriver, если выбрали Chrome) Теримнал покажет готовность получить команды от вас для драйвера. Чтобы выйти из режима нажимте Ctrl+C .
Установить пакет Selenium командой в Терминале (для Windows в Терминале приложения для разработки или тоже в Терминале для Linux): pip install selenium
Исходный код
# ref
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
#инициализация
driver = webdriver.PhantomJS()
# переход по ссылке
driver.get(href)
try:
# ожидаем появления на странице элемента с аттрибутом "class" со значением "item-address__string"
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "item-address__string"))
)
# находим нужный элемент
elem = driver.find_element_by_class_name("item-address__string")
# и получаем его текст
full_address = elem.text
print('full_address = ' + full_address)
except BaseException as ex:
print('Error load avito page. Error = ' + format(ex))
# скрин окна барузера (как оно выглядело в момент ошибки)
driver.save_screenshot('screenshot.png')
finally:
# обязательно выгружаем из памяти
driver.quit()
Работаю с Human Emulator Studio 7 на основном языке PHP, столкнулся с проблемой при соединении с БД MySQL при Update операции при использовании библиотеки PDO: 2006 MySQL server has gone away
Мне подошел вариант с изменением настроек php.ini файла в блоке [Pdo_mysql], а именно добавить строчку для увеличения таймаута для ожидания соединения с БД: mysql.connect_timeout=90
[Pdo_mysql] ; Default socket name for local MySQL connects. If empty, uses the built-in ; MySQL defaults. pdo_mysql.default_socket= mysql.connect_timeout=90
P.S. Не забываем устанавливать null для Connection объекта в PDO режиме.
Требуемая версия Python 3.7.6. Хостинг имеет базовые
настройки, где возможно выбрать версию Python
У целевого хостинга используется ISP Manager
Доступ через SSH клиент подключение к хостингу Putty
Настройка в панели управления доменом
Для настройки нужно перейти к Панели управления хостингом, выбрать целевой хостинг.
Перейдите в настройки хостинга в ISP Manager в разделе WWW/WWW-домены. Установить галочку на CGI-скрипты и Версия Python в данном случае значение Python-3.7.6 Нажать OK, чтобы применить изменения.
SSH клиент подключение
Есть хостинг, нужно настроить на нем Python:
Подключение происходит через приложение Putty, которое необходимо установить.
Подключитесь к хостингу по SSH для чего необходимо запустить приложение Putty, прописать в поле Host Name IP адрес целевого хостинга (его можно узнать на странице управления хостингами) и нажать кнопку Open
При первом подключении к серверу появится окно «Предупреждение безопасности PuTTY». Нажмите кнопку Да. Появится окно для набора команд, его мы будем называть Терминал, как в Linux системах
Далее необходимо пройти логин операцию. Введите логин хостинга в первой строке со значением «login as:» и нажмите кнопку Enter для выполнения команды (здесь выполняется команда, Enter выполняет команду, далее подразумевается, что выполняя команду вы будете нажимать эту кнопку ). Далее следует строка: “<username>@<ip adress>’s password:” пишем команду пароль к учетной записи. Как только вы подключитесь по SSH, вы окажетесь в домашнем каталоге вашего хостинга.
5. Создадим Виртуальное окружение, для чего, надо перейдите в домашний каталог вашего пользователя с помощью команды: cd ~ Убедитесь, что вы в нужном каталоге, выполнив команду: pwd Для этого Виртуальное окружение необходимо создать в одной из существующих папок с нужной версией Python. Эту песочницу мы планируем использовать для вашего проекта. Версия Python должна совпадать со значением устанавливаем в пункте 2. Чтобы узнать доступные версии Python, выполните команду: ls -la /opt/python/*/bin/python Для создания виртуального окружения выполните команду: /opt/python/python-3.7.6/bin/python -m venv pyth3 Где pyth3 – это название для Виртуального окружения
6. Активируйте ваше виртуальное окружение с помощью команды: source pyth3/bin/activate Если слева от строки ввода команды появилось название вашего виртуального окружения pyth3, значит оно активировалось.
7. После активации можно использовать команды формата pip install <app name>, для установки набора необходимых библиотек, согласно инструкциям по установке. Библиотека pip, в данном случае, уже установлена. 8. После всех операций, в ISP Manager в Менеджере файлов можно найти папку /pyth3/
Важно: если вы несколько раз подряд ввели неправильный пароль и сервер заблокировал соединение по SSH, обычно блокируется на 2 часа или более Важно: Если лень набирать используйте буфер обмена: для вставки в Терминал используйте Shift+Insert Важно: Обратите внимание: многие из команд выполнить на виртуальном хостинге не получится (установка и удаление пакетов, монтирование файловых систем и др.), так как у вас нет root-доступа. Важно: Для нашей версии Python 3.7.6 будет свой каталог и это называется — Виртуальное окружение. Это как песочница для работы с нужной версией Python. Такой подход гарантирует, что в песочнице будет нужная версия Python и строго определенный набор библиотек. Важно: команда для контроля, какая версия Python в активированном виртуальном окружении: python --version Важно: Если в вашей системе обновилась версия Python, то виртуальное окружение иногда тоже нужно обновить. Но обновлять мы будем папку, где находится библиотека Pythobn, на которую мы ссылаемся. Для этого вызываем venv аналогично созданию окружения, добавив ключ –upgrade команда: pyvenv --upgrade /opt/python/python-3.7.6/bin/python
Проверяем работоспособность Python скрипта
1. Для тестирования необходимо
создать файл test.py с
кодом:
print('Hello')
код выводит в консоль текст Hello
2. Файл по ftp заливаем на
хостинг в папку /pyth3/bin/
3. Для работы в Менеджере файлов нужно найти файл и установить (разрешить) ему
атрибуты на Исполнять, Писать и Читать по схеме -rwxr-xr-x (установить галочку и желательно снять галочки
для атрибутов не члены групп или владелец).
4. Исполнить файл можно в режиме
Терминала (Консоли), например, через Putty.
С активацией:
Логинимся и активируем каталог со средой команда:
source pyth3/bin/activate
Исполняем файл (он лежит в bin папке) команда:
pyth3/bin/python pyth3/bin/test.py
Без активации:
Логинимся и сразу исполняем файл командой:
pyth3/bin/python pyth3/bin/test.py
В итоге мы увидим в терминале
сообщение: Hello
Установка библиотек в Python
Вам точно не будет хватать
базового набора библиотек в Python.
Необходимо будет их подключить, для чего:
1.Логинимся через Putty на Терминал и активируем каталог наш со средой команда:
source pyth3/bin/activate
2. Вводим в Теримнале команду :
pip install <app name>
, где <app name> это имя библиотеки (сборки). Действуя по инструкциям по установке сторонних библиотек. Библиотека pip в данном случае уже установлена.
Запуск скрипта по расписанию Python скрипта
Теперь необходимо выполнять скрипт автоматически периодически,
например, ежедневно. Для примера будем использовать уже созданную нами папку /pyth3/с
Виртуальным окружением, но команда будет выполнятся без активации.
В панели ISP Manager выберите в разделе Главное пункт Планировщик
Планировщик кнопка Настройки здесь заполните email адрес, куда будут приходить письма с отчетом о выполнении (текст из консоли исполняемого приложения)
В меню Планировщик кликаем кнопку Создать
Заполняем поля: Команда, Описание и Выполнять Каждый час команда: pyth3/bin/python3/var/www/u0000000/data/pyth3/bin/test.py Описание: test Выполнять: каждый час или выберите другие интервалы
Жмем кнопку OK и все готово
Чтобы узнать, когда выполнился наш скрипт загляните в указанную выше почту
Важно: команда содержит в себе путь к исполняемому скрипту, он в
вашем случае может быть другим
Важно: значение в команде pyth3/bin/python3 это путь к файлу ядра Python, фактически же ядро находится в другой каталог по адресу /opt/python/python-3.7.6/bin/python, а это ссылка на среду из Виртуального окружения. Если в команде использовать прямую путь к ядру может возникнуть ошибка исполнения, так как мы потеряли связку с дополнительным набором библиотек.
Важно: в консоли, если запросить текущую версию Python командой:
python --version
то в ответ мы получим значение 2.7.15 это ядро по умолчанию. Код примера и библиотек будет работать на версии 3 и выше, поэтому код запускается в Виртуальным окружении, где мы сами определяем, какую версию мы будем использовать.
Мы используем куки для наилучшего представления нашего сайта. Если Вы продолжите использовать сайт, мы будем считать что Вас это устраивает.