qr code картинкой

php smtp yandex отправка письма с файлом

<?php $from = 'from@yandex.ru'; $fromName = 'fromName'; $fromPassword = 'fromPassword'; $to = 'to@yandex.ru'; $title = 'title123'; $htmlContent = "<h1>HI WORLD</h1>"; /*<h2>Данные пользователя, который отправил</h2> <ol> <li><b>Дата:</b> ".date('Y-m-d H:i:s')."</li> <li><b>Дата unix</b> ".time()."</li> <li><b>IP:</b> ".$_SERVER['REMOTE_ADDR']."</li> <li><b>Тело:</b> ".file_get_contents('php://input')."</li> <li><b>GET:</b> ".print_r($_GET, true)."</li> <li><b>POST:</b> ".print_r($_POST, true)."</li> <li><b>FILES:</b> ".print_r($_FILES, true)."</li> <li><b>COOKIE:</b> ".print_r($_COOKIE, true)."</li> <li><b>Getallheaders:</b> ".print_r(getallheaders(), true)."</li> </ol>*/ $delimeter = md5(time()); $fileName = 'WT '.date("Ymd His").'.json'; $fileContent = '{"hi":123}'; // --------- // Заголовки $headers = "From: $fromName <$from>\r To: <$to>\r Subject: $title\r MIME-Version: 1.0\r Content-Type: multipart/mixed; boundary=\"$delimeter\"\r "; // Сообщение $message = "--$delimeter\r Content-Type: text/html; charset=\"utf-8\"\r Content-Transfer-Encoding: 7bit\r\n\r $htmlContent\r\n\r --$delimeter\r Content-Type: application/octet-stream; name=\"$fileName\"\r Content-Transfer-Encoding: base64\r Content-Disposition: attachment\r\n\r ".chunk_split(base64_encode($fileContent))."\r\n\r --$delimeter--"; // Подключение $smtp = fsockopen('ssl://smtp.yandex.ru', 465, $errCode, $errText, 30); if (!$smtp) { echo "Ошибка подключения к SMTP-серверу: $errCode - $errText"; exit(); } $response = fread($smtp, 1024); if (strpos($response, '220') === false) { echo "Ошибка при подключении к SMTP-серверу: $response"; exit(); } fputs($smtp, "HELO smtp.yandex.ru\r\n"); $response = fread($smtp, 1024); if (strpos($response, '250') === false) { echo "Ошибка при приветствии SMTP-сервера: $response"; exit(); } fputs($smtp, "AUTH LOGIN\r\n"); $response = fread($smtp, 1024); if (strpos($response, '334') === false) { echo "Ошибка при аутентификации: $response"; exit(); } fputs($smtp, base64_encode($from) . "\r\n"); $response = fread($smtp, 1024); if (strpos($response, '334') === false) { echo "Ошибка при отправке имени пользователя: $response"; exit(); } fputs($smtp, base64_encode($fromPassword) . "\r\n"); $response = fread($smtp, 1024); if (strpos($response, '235') === false) { echo "Ошибка при отправке пароля: $response"; exit(); } fputs($smtp, "MAIL FROM: <$from>\r\n"); $response = fread($smtp, 1024); if (strpos($response, '250') === false) { echo "Ошибка при указании отправителя: $response"; exit(); } fputs($smtp, "RCPT TO: <$to>\r\n"); $response = fread($smtp, 1024); if (strpos($response, '250') === false) { echo "Ошибка при указании получателя: $response"; exit(); } fputs($smtp, "DATA\r\n"); $response = fread($smtp, 1024); if (strpos($response, '354') === false) { echo "Ошибка при начале передачи письма: $response"; exit(); } fputs($smtp, $headers . "\r\n"); fputs($smtp, $message . "\r\n"); fputs($smtp, ".\r\n"); $response = fread($smtp, 1024); if (strpos($response, '250') === false) { echo "Ошибка при отправке письма: $response"; exit(); } fputs($smtp, "QUIT\r\n"); fclose($smtp); echo "Письмо успешно отправлено.";

php smtp yandex отправка

<?php // Работает function sendEmailViaSMTP($to, $subject, $body, $from = 'example@yandex.ru', $fromName = 'Backup for worktime') { $smtp = fsockopen('ssl://smtp.yandex.ru', 465, $errno, $errstr, 30); //$smtp = fsockopen('ssl://s62.nska.net', 465, $errno, $errstr, 30); // 'ssl://s62.nska.net' if (!$smtp) { return "Ошибка подключения к SMTP-серверу: $errno - $errstr"; } $response = fread($smtp, 1024); if (strpos($response, '220') === false) { return "Ошибка при подключении к SMTP-серверу: $response"; } fputs($smtp, "HELO smtp.yandex.ru\r\n"); $response = fread($smtp, 1024); if (strpos($response, '250') === false) { return "Ошибка при приветствии SMTP-сервера: $response"; } fputs($smtp, "AUTH LOGIN\r\n"); $response = fread($smtp, 1024); if (strpos($response, '334') === false) { return "Ошибка при аутентификации: $response"; } fputs($smtp, base64_encode('example@yandex.ru') . "\r\n"); $response = fread($smtp, 1024); if (strpos($response, '334') === false) { return "Ошибка при отправке имени пользователя: $response"; } fputs($smtp, base64_encode('password') . "\r\n"); $response = fread($smtp, 1024); if (strpos($response, '235') === false) { return "Ошибка при отправке пароля: $response"; } fputs($smtp, "MAIL FROM: <$from>\r\n"); $response = fread($smtp, 1024); if (strpos($response, '250') === false) { return "Ошибка при указании отправителя: $response"; } fputs($smtp, "RCPT TO: <$to>\r\n"); $response = fread($smtp, 1024); if (strpos($response, '250') === false) { return "Ошибка при указании получателя: $response"; } fputs($smtp, "DATA\r\n"); $response = fread($smtp, 1024); if (strpos($response, '354') === false) { return "Ошибка при начале передачи письма: $response"; } fputs($smtp, "From: $fromName <$from>\r\n"); fputs($smtp, "To: <$to>\r\n"); fputs($smtp, "Subject: $subject\r\n"); fputs($smtp, "\r\n"); fputs($smtp, $body . "\r\n"); fputs($smtp, ".\r\n"); $response = fread($smtp, 1024); if (strpos($response, '250') === false) { return "Ошибка при отправке письма: $response"; } fputs($smtp, "QUIT\r\n"); fclose($smtp); return "Письмо успешно отправлено."; } $to = 'MailTo@ya.ru'; $subject = 'Тема письма5'; $body = 'Текст письма5'; $result = sendEmailViaSMTP($to, $subject, $body); echo $result;

Промпт для код ревью PHP и JavaScript

Рефакторируйте следующий PHP и JavaScript фрагмент кода, применяя принципы объектно-ориентированного программирования (ООП), SOLID, DRY и KISS. Проанализируйте и улучшите код, объяснив, чем обусловлена каждая модификация. При необходимости предложите альтернативные решения и перепишите логику, чтобы повысить удобство сопровождения, читабельность и производительность. Обеспечьте тщательное тестирование и следование лучшим практикам. Представьте ответ из трех частей: 1. Опишите недостатки и проблемы запрашиваемого кода. 2. Опишите принятые решения по улучшению кода и добавьте краткую расписку изменений. 3. Архив с измененным кодом, тестами и соответствующей документацией. Весь текст (пункты 1, 2, документация и комментарии) должен быть написан на русском языке. Код может выполнять различные задачи, но всегда является частью ООП проекта. Фрагменты представляют собой отдельные классы. Код должен соответствовать принципам SOLID, DRY, KISS. В проекте также работают другие разработчики с высоким уровнем подготовки. (Вставьте ваш PHP и JavaScript фрагмент кода здесь)

Промпт для создания промптов

Твоя роль - создатель идеальных промптов. Ты будешь уточнять у меня все подробности моей задачи и создашь для нее идеальный промпт, который я смогу использовать в ChatGpt 4o для получения максимально полного и корректного ответа. Наш диалог будет строиться по следующим правилам: сначала ты спрашиваешь у меня, с какой задачей мне нужна помощь, я отвечаю, а затем выдаешь ответ в виде двух пунктов. Пункт 1: отредактированный промпт. Пункт 2: список вопросов, ответы на которые помогут тебе улучшить этот промпт. Я отвечаю на твои вопросы и затем ты снова выдаешь ответ в виде двух пунктов. Пункт 1: отредактированный промпт. Пункт 2: список вопросов, ответы на которые помогут тебе улучшить этот промпт. Я отвечаю на твои вопросы и затем ты снова выдаешь ответ в виде двух пунктов. Пункт 1: отредактированный промпт. Пункт 2: список вопросов, ответы на которые помогут тебе улучшить этот промпт. Я отвечаю на твои вопросы и т.д. пока мы не создадим идеальный промпт.

Здоровая еда, обед

- Гречка (Важно не переваривать! Лучше немного не доварить) - Яйца - Перловка - Гороховая (Нут Чечевица Фасоль Киноа) - Овсянка (на воде, не очищенная, которую надо 15 минут варить) - Картошка (не много, хотя бы разв неделю) + сметана и помидоры Груши Апельсины Листовая зелень - Лук - Укроп - Петрушка - Чеснок Овощи - Морковь - Свекла - капуста Свой йогурт: - Кислое молоко с ягодами + Бананы - Покупается закваска для Йогурта Сыры из овечего, либо козьего молока Немного: Кефир, творог, козий сыр Кефир лучше делать свой! Икра рыбки (даже та, которая из водорослей) Немного зелёного чая Немного Булгур (Раз в неделю) можно изредка (раз в 2-3 недели) варить куриные ножки(но не обязательно) # Вредно! - Жаренное - Сахар - Соль - Кукурузная каша - Манная каша - Ячменная - Рисовая (особенно от белого) Но её можно выбрать при мягком стуле

golang собеседования подготовка

Офиц https://go.dev/ Быстрое изучение https://gobyexample.com/ https://gobyexample.com.ru/ https://go.dev/tour/welcome/1 Как книга https://metanit.com/go/tutorial/ 6 собесов https://www.youtube.com/watch?v=_rTuAY7b1RE Сайты Книги Задачи для изучения https://www.youtube.com/watch?v=tjOZ_lhj0vM Задача https://www.youtube.com/watch?v=Qf24zMzMmgI https://www.youtube.com/watch?v=b2qJYHS_JvM Как готовиться https://www.youtube.com/watch?v=aFD4RMn5Jgs

linux Переключение терминалов или оставить задачу в фоне

screen -ls // что запущено в фоне screen -S name1 // Новый screen -r name1 // Вернуться в Ctrl a d // Выход без закрытия Ctrl d // Выход С закрытием attached - означает, что использует кто-то другой screen -Dr name1 // Принудительно отсоединить и войти https://losst.pro/komanda-screen-linux sudo apt install screen screen нужно нажать Space или Enter. Ctrl + a Например, чтобы создать новое окно, нажмите по очереди сочетание Ctrl + a и затем c. Для просмотра списка созданных окон нажмите Ctrl + a и w. Для перехода в любое из созданных окон сессии используется комбинация Ctrl + a и номер, Для скрытия окна используйте Ctrl + a и X Чтобы скрыть все окна и оставить только текущее, используйте Ctrl + a и Q --- https://www.youtube.com/watch?v=lZ8lIimCsGU Видео Список screen -ls попасть screen или screen -S name1 Выход без закрытия Ctrl a d Выход С закрытием Ctrl d Если сессия Attached то screen -r -D 2483784.browser Вернуться по иду в списке после списка screen -ls screen -r 2568 или screen -r name1 Сразу запуск в фоне screen -dmS bot5 bash -c '~/Desktop/bot/cmd/server2'

Тест устройств

Тест камеры https://ru.webcamtests.com/ Тест микрофона https://webcammictest.com/ru/check-mic.html imice web-камера https://www.ozon.ru/product/veb-kamera-dlya-pk-s-mikrofonom-usb-vebkamera-s-shtativ-veb-kamera-dlya-noutbuka-kompyutera-30-fps-999602743/ Надо Веб-камера Logitech Brio Ultra HD Pro 5214354883 Веб-камера Logitech C1000e https://www.dns-shop.ru/product/03c050c32518ed20/veb-kamera-logitech-c1000e/

как посмотреть sql запрос к базе, зная данные из htop ? те которые висят более часа

Для просмотра SQL-запросов, которые висят более часа, можно использовать различные инструменты в зависимости от типа базы данных. Вот несколько примеров для популярных баз данных: ### PostgreSQL 1. **Использование `pg_stat_activity`**: ```sql SELECT pid, usename, datname, state, query, now() - query_start AS duration FROM pg_stat_activity WHERE state = 'active' AND now() - query_start > interval '1 hour'; ``` 2. **Использование `pg_cancel_backend` или `pg_terminate_backend`** для остановки запросов: ```sql SELECT pg_cancel_backend(pid) FROM pg_stat_activity WHERE now() - query_start > interval '1 hour'; ``` ### MySQL 1. **Использование `information_schema.processlist`**: ```sql SELECT id, user, host, db, command, time, state, info FROM information_schema.processlist WHERE time > 3600; ``` 2. **Использование `KILL` для остановки запросов**: ```sql KILL <process_id>; ``` ### Oracle 1. **Использование `v$session` и `v$sql`**: ```sql SELECT s.sid, s.serial#, s.username, s.status, s.sql_id, q.sql_text FROM v$session s JOIN v$sql q ON s.sql_id = q.sql_id WHERE s.status = 'ACTIVE' AND s.last_call_et > 3600; ``` ### SQL Server 1. **Использование `sys.dm_exec_requests` и `sys.dm_exec_sql_text`**: ```sql SELECT r.session_id, r.status, r.command, r.start_time, t.text FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t WHERE r.start_time < DATEADD(hour, -1, GETDATE()); ``` ### Общие шаги: 1. **Использование `htop`**: - Запустите `htop` и найдите процессы, которые висят более часа. - Запомните PID (Process ID) этих процессов. 2. **Использование базы данных**: - Подключитесь к базе данных и выполните SQL-запросы, чтобы найти запросы, которые висят более часа. - Используйте PID из `htop` для идентификации конкретных запросов. ### Пример скрипта на Python для PostgreSQL: ```python import psycopg2 # Подключение к базе данных conn = psycopg2.connect( host="localhost", database="your_database", user="your_user", password="your_password" ) # Создание курсора cur = conn.cursor() # Выполнение запроса cur.execute(""" SELECT pid, usename, datname, state, query, now() - query_start AS duration FROM pg_stat_activity WHERE state = 'active' AND now() - query_start > interval '1 hour'; """) # Получение результатов rows = cur.fetchall() # Вывод результатов for row in rows: print(row) # Закрытие курсора и соединения cur.close() conn.close() ``` Этот скрипт подключается к базе данных PostgreSQL и выполняет запрос для поиска активных запросов, которые висят более часа. Результаты выводятся на экран.

в htop есть множество mysql процессов, у которых время выше 14h, как от них избавиться?

Для того чтобы избавиться от долго выполняющихся MySQL процессов, можно использовать несколько методов. Вот несколько шагов, которые могут помочь: 1. **Определите процессы**: Сначала нужно определить, какие именно процессы выполняются долго. Вы можете использовать команду `SHOW FULL PROCESSLIST` в MySQL для просмотра всех текущих процессов. 2. **Завершите процессы**: Если вы уверены, что эти процессы можно завершить без негативных последствий, вы можете использовать команду `KILL` в MySQL. Пример: ```sql SHOW FULL PROCESSLIST; ``` Эта команда покажет вам список всех процессов. Найдите процессы с долгим временем выполнения и запомните их `Id`. Затем используйте команду `KILL` для завершения этих процессов: ```sql KILL <process_id>; ``` Замените `<process_id>` на фактический идентификатор процесса, который вы хотите завершить. 3. **Оптимизация запросов**: Если долго выполняющиеся процессы являются результатом неоптимизированных запросов, вам следует проанализировать и оптимизировать эти запросы. Вы можете использовать EXPLAIN для анализа запросов и индексации таблиц для улучшения производительности. 4. **Настройка MySQL**: Возможно, вам потребуется настроить параметры MySQL, такие как `wait_timeout` и `interactive_timeout`, чтобы автоматически завершать долго выполняющиеся соединения. Пример настройки в файле конфигурации MySQL (`my.cnf` или `my.ini`): ```ini [mysqld] wait_timeout = 3600 interactive_timeout = 3600 ``` Эти параметры установят время ожидания для неактивных соединений в 1 час. 5. **Мониторинг и аудит**: Настройте мониторинг и аудит для отслеживания долго выполняющихся процессов в будущем. Это поможет вам быстро реагировать на подобные ситуации. Если вы не уверены в том, какие процессы можно безопасно завершить, рекомендуется обратиться к документации MySQL или консультанту по базам данных.

Создать sql базу данных через консоль

Добавить пользователя, через ssh с правами на просмотр код. ОБЯЗАТЕЛЬНО У ПАРОЛЯ ОДИНАРНЫЕ КОВЫЧКИ!!! mysql --user="root" --password='pass0' CREATE USER 'user1'@'%' IDENTIFIED BY 'pass1'; GRANT SELECT ON * . * TO 'user1'@'%'; GRANT SELECT, CREATE ON * . * TO 'user1'@'%'; REVOKE SELECT ON * . * TO 'user1'@'%'; mysql --user="root" --password="pass1" CREATE USER 'user1'@'%' IDENTIFIED BY 'pass2'; CREATE DATABASE bd1; USE bd1 GRANT CREATE, ALTER, SELECT, INSERT, UPDATE, DELETE ON bd1 . * TO user1; GRANT DROP ON bd1 . * TO user1; REVOKE DROP ON bd1 . * TO user1; GRANT LOCK TABLES ON bd1.* TO 'user1'@'%'; CREATE USER 'userName'@'%' IDENTIFIED BY 'password123'; CREATE DATABASE dbName; USE dbName GRANT CREATE, DROP, LOCK TABLES, ALTER, SELECT, INSERT, UPDATE, DELETE ON dbName . * TO userName; .. Список прав CREATE — Позволяет пользователям создавать базы данных/таблицы SELECT — Разрешает делать выборку данных INSERT — Право добавлять новые записи в таблицы UPDATE — Позволяет изменять существующие записи в таблицах DELETE — Даёт право удалять записи из таблиц DROP — Возможность удалять записи в базе данных/таблицах аб. https://www.hostinger.ru/rukovodstva/kak-sozdat-polzovatelya-mysql-i-nastroit-prava-dostupa/ Подробная инструкция

Почему выбрал эти языки программирования

python - для быстрого решения бизнес задач, но он дешевый golang - для производительности в нагруженных местах, (это тот же си, только встроенная многопоточность и на нем быстрее и удобнее писать) Rust - оптимально работает с памятью, но медленно писать на нем Js - идет на всем, где есть браузер, но для бэка требует кучу либ Приоритетнее решать задачи, Оптимизировать - вторично

Установка сайтов в виде приложений PWA

index.html ```html <!DOCTYPE html> <html lang="en"> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>My App PWA</title> <link rel="stylesheet" href="style.css"> <script src="script.js" defer></script> <meta property="og:image" content="images/android-chrome-256x256.png"> <meta property="og:image:width" content="256"> <meta property="og:image:height" content="256"> <meta property="og:title" content="PWA APP"> <meta property="og:description" content="Testing PWA application"> <link rel="manifest" href="manifest.json"> <link rel="apple-touch-icon" sizes="180x180" href="images/apple-touch-icon.png"> <link rel="icon" type="image/png" sizes="32x32" href="images/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="16x16" href="images/favicon-16x16.png"> <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"> <meta name="msapplication-TileColor" content="#da532c"> <meta name="theme-color" content="#ffffff"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes"> <title>PWA APP</title> <base href="https://natalia-orlova.github.io/btnUp/"> </head> <body> <button class="install-btn">Установить приложение</button> <button class="instruction-btn">Как установить приложение?</button> <div id="myModal" class="modal"> <div class="modal-content"> <span class="close">&times;</span> </div> </div> <div class="content"> Lorem 5 </div> <script type="module"> import Bowser from "/btnUp/bowser/bowser.js"; const browser = Bowser.getParser(window.navigator.userAgent); const browserName = browser.getBrowserName(); const installButton = document.querySelector('.install-btn'); const instructionButton = document.querySelector('.instruction-btn'); let installEvent; const modal = document.getElementById('myModal'); const modalContent = modal.querySelector('.modal-content'); const closeButton = document.getElementsByClassName('close')[0]; /** * регистрация service-worker */ if ('serviceWorker' in navigator) { window.addEventListener('load', () => { navigator.serviceWorker.register('/btnUp/service-worker.js').then(registration => { console.log('Service Worker registered with scope:', registration.scope); }).catch(error => { console.log('Service Worker registration failed:', error); }); }); } /** * Функции для модального окна */ function openModal() { modal.style.display = 'block'; } function closeModal() { modal.style.display = 'none'; instructionButton.style.display = 'none'; } closeButton.onclick = function () { closeModal(); }; window.onclick = function (event) { if (event.target === modal) { closeModal(); } }; /** * проверка, с мобильного устройства или нет зашел пользователь */ function isMobileDevice() { return window.innerWidth <= 768; } if (isMobileDevice()) { /*Работает на Chrome, Microsoft Edge (версия 76 и выше) */ window.addEventListener('beforeinstallprompt', (e) => { // Показываем кнопку установки только если условия для установки PWA выполнены installButton.style.display = 'block'; installEvent = e; }); installButton.addEventListener('click', () => { // Запускаем установку приложения if (installEvent) { installEvent.prompt().then((result) => { if (result.outcome === 'accepted') { // Пользователь согласился на установку, скрываем кнопку installButton.style.display = 'none'; } else if (result.outcome === 'dismissed') { // Пользователь отменил установку, оставляем кнопку активной // ничего не делаем, кнопка остается активной } }); } }) if (browserName === 'Safari' || browserName === 'Firefox' || browserName === 'Opera') { installButton.style.display = 'none'; instructionButton.style.display = 'block'; instructionButton.addEventListener('click', () => { // Показываем инструкцию по установке openModal(); }) switch (browserName) { case 'Safari': modalContent.insertAdjacentHTML('beforeend', `<p>Пожалуйста, следуйте этим шагам для установки приложения на вашем устройстве через Safari:</p> <ol> <li>Нажмите на кнопку «Поделиться» внизу экрана.</li> <li>Выберите «Добавить на экран Домой» из списка опций.</li> <li>Нажмите «Добавить» в правом верхнем углу.</li> </ol>`); break; case 'Firefox': modalContent.insertAdjacentHTML('beforeend', `<p>Пожалуйста, следуйте этим шагам для установки приложения на вашем устройстве через Mozilla Firefox:</p> <ol> <li>Нажмите на иконку « ⋮ » в правом верхнем углу экрана.</li> <li>Выберите «На домашний экран»</li> </ol>`); break; case 'Opera': modalContent.insertAdjacentHTML('beforeend', `<p>Пожалуйста, следуйте этим шагам для установки приложения на вашем устройстве через Opera:</p> <ol> <li>Нажмите на иконку « ⋮ » в правом верхнем углу экрана.</li> <li>Выберите «Добавить в...» из списка опций.</li> <li>Выберите «Главный экран»</li> </ol>`); break; default: break; } } window.addEventListener('appinstalled', () => { // Скрыть кнопки после установки PWA installButton.style.display = 'none'; instructionButton.style.display = 'none'; }); const standaloneMediaQuery = matchMedia('(display-mode: standalone)'); if (standaloneMediaQuery.matches) { // Скрыть кнопку, если приложение запущено в standalone-режиме installButton.style.display = 'none'; instructionButton.style.display = 'none'; } } </script> </body> </html> ``` manifest.json ```json { "name": "My App PWA", "short_name": "My App PWA", "description": "Test PWA application", "icons": [ { "src": "images/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png" }, { "src": "images/android-chrome-256x256.png", "sizes": "256x256", "type": "image/png" } ], "start_url": "https://natalia-orlova.github.io/btnUp/", "display": "standalone", "background_color": "#fff", "theme_color": "#d3b971", "firefox_add_to_homescreen": true } ``` script.js ```js "use strict"; const btnUp = document.createElement('button'); btnUp.classList.add('btn-up'); btnUp.classList.add('btn-up__hide'); const btnUpStyle = document.createElement('style'); btnUpStyle.innerHTML = ` .btn-up { position: fixed; left: 100px; bottom: 40px; width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; cursor: pointer; border-radius: 50%; background-color: #fff; box-shadow: 1px 1px 5px rgba(0,0,0,.1); opacity: 100%; transition: all 0.5s; border: none; } .btn-up:hover { transform: scale(1.2); } .btn-up::before { content: ""; width: 40px; height: 40px; background-image: url(https://armango.com/app/images/icons/pagination_arrow.png); background-repeat: no-repeat; background-size: 50% 30%; background-position: center; transform: rotate(90deg); } .btn-up__hide { opacity: 0; transition: 0.5s; } @media (max-width:900px) { .btn-up { left: 20px; bottom: 20px; } } `; document.head.appendChild(btnUpStyle); document.body.appendChild(btnUp); window.addEventListener('scroll', () => { const scrollY = window.scrollY || document.documentElement.scrollTop; if (scrollY > (document.documentElement.clientHeight)) { btnUp.classList.remove('btn-up__hide'); } else { btnUp.classList.add('btn-up__hide'); } }) btnUp.addEventListener('click', () => { window.scrollTo({ top: 0, left: 0, behavior: 'smooth' }) }) ``` service-worker.js ```js const CACHE_NAME = "my-cache"; const urlsToCache = [ "https://natalia-orlova.github.io/btnUp/", // "https://natalia-orlova.github.io/btnUp/index.html", // "https://natalia-orlova.github.io/btnUp/style.css", // "https://natalia-orlova.github.io/btnUp/script.js", "https://natalia-orlova.github.io/btnUp/images/icon-192x192.png", ]; // self.addEventListener("install", (event) => { // event.waitUntil( // caches.open("my-cache").then((cache) => { // console.log("Opened cache"); // return cache.addAll([ // '/', // '/style.css', // '/script.js', // // Другие URL ресурсов // ]); // }) // ); // }); self.addEventListener('install', function(event) { event.waitUntil( caches.open('my-cache-name').then(function(cache) { return Promise.all([ '/btnUp/', '/btnUp/style.css', '/btnUp/script.js', // Другие URL ресурсов ].map(function(url) { return fetch(url).then(function(response) { if (response.ok) { console.log('ok'); return cache.add(url); } else { console.error('Failed to fetch resource:', url); return Promise.reject(new Error('Request failed')); } }); })); }) ); }); self.addEventListener("fetch", (event) => { event.respondWith( caches.match(event.request).then((response) => { if (response) { return response; } return fetch(event.request); }) ); }); self.addEventListener("activate", (event) => { event.waitUntil( caches.keys().then((cacheNames) => { return Promise.all( cacheNames.map(name => { if (name !== "my-cache") { return caches.delete(name); } }) ); }) ); }); self.addEventListener("appinstalled", () => { // Скрыть кнопку после установки приложения document.querySelector(".install-btn").style.display = "none"; }); ``` # PWA Application 1. Создан файл manifest.json, который содержит описание приложения (имя, описание, иконки и т.д.) В тег <head> добавлено: `<link rel="manifest" href="manifest.json">` 2. Создан файл service-worker.js, который обрабатывает запросы к приложению и кэширует ресурсы. В скрипте регистрируем service worker. 3. [Здесь генератор иконок](https://realfavicongenerator.net/), с помощью которого сделала иконки, после генерации скачиваем архив с иконками и копируем код, который нужно вставить в тег `<head>` 4. Добавлена логика для установки PWA. Для браузеров, которые позволяют веб-сайтам предлагать пользователю установку PWA, добавляем на страницу кнопку "Установить приложение" (Chrome, Edge, Yandex). При клике на кнопку отображается окно подтверждения установки приложения. Эта кнопка скрывается после установки приложения, либо остается видимой, если пользователь нажал "отмена" в диалоговом окне. Лучше всего это работает в браузере Chrome, приложение устанавливается именно как приложение, а не как страница браузера с иконкой самого браузера, из которого эту страницу сохранили на главный экран. Кнопка "Установить" не появляется на странице, пока приложение установлено на устройстве пользователя. В то время, как другие браузеры дают возможность добавлять страницу на домашний экран множество раз. Но если приложение уже установлено на Android через Chrome, то в Yandex и Edge не будет появляться кнопка установки. Firefox также будет предлагать открыть страницу в этом приложении при попытке открыть ярлык на домашнем экране, установленный с помощью firefox. 5. - Браузер Safari не поддерживает событие beforeinstallprompt - Firefox и Safari поддерживают PWA только на Android и iOS, а не на настольных компьютерах. Для нескольких браузеров (Safari, Firefox, Opera) добавлена кнопка "Как установить приложение?", при клике на которую в модальном окне открывается инструкция для того браузера из списка, через который пользователь зашел на сайт. При закрытии окна с инструкцией, кнопка также скрывается, но при обновлении страницы кнопка будет отображаться снова. Для того, чтобы выяснить, с какого браузера зашел пользователь, установлена библиотека ["Bowser"](https://github.com/bowser-js/bowser/tree/master/src). ## Примеры установки приложения с помощью разных браузеров ### Установка приложения через Chrome <img src="screen/pageChrome.jpg" width="30%" alt="страница в Chrome"> <img src="screen/downloadChrome.jpg" width="30%" alt="установка приложения"> <img src="screen/pwaApp.jpg" width="30%" alt="приложение установлено"> <img src="screen/pwaWindow.jpg" width="30%" alt="страница в приложении"> ### Установка приложения через Firefox <img src="screen/pageFirefox.jpg" width="30%" alt="страница в Firefox"> <img src="screen/instrFirefox.jpg" width="30%" alt="инструкция в Firefox"> <img src="screen/downloadFirefox.jpg" width="30%" alt="установка в Firefox"> <img src="screen/pwaFirefox.jpg" width="30%" alt="страница в приложении"> *В Opera установка примерно похожа на Firefox, отличается инструкция* <img src="screen/instrOpera.jpg" width="30%" alt="инструкция в Opera"> ### Ярлыки установленного pwa через разные браузеры <img src="screen/labels.jpg" alt="ярлыки pwa">

Запрос данных чека в nalog налог

```php <?php class NalogQR { public static $version = '2024-05-06'; private static $host = 'irkkt-mobile.nalog.ru:8888'; private static $deviceOS = 'iOS'; private static $os = 'Android'; private static $clientVersion = '2.9.0'; private static $deviceId = '7C82010F-16CC-446B-8F66-FC4080C66521'; private static $accept = '*/*'; private static $userAgent = 'billchecker/2.9.0 (iPhone; iOS 13.6; Scale/2.00)'; private static $acceptLanguage = 'ru-RU;q=1, en-US;q=0.9'; private static $clientSecret = 'IyvrAbKt9h/8p6a7QPh8gpkXYQ4='; private static function request(string $url, array $payload = [], array $headers = []): string { //print_r(['function request', $url, $payload, $headers]); $curl = curl_init($url); curl_setopt($curl, CURLOPT_POST, (empty($payload) ? false : true)); // SSL curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); if (!empty($payload)) { // curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($payload)); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($payload)); $headers['Content-Type'] = 'application/json'; } if (!empty($headers)) { $headersFinal = []; foreach ($headers as $name => $value) $headersFinal[] = "$name: $value"; curl_setopt($curl, CURLOPT_HTTPHEADER, $headersFinal); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // Только возврат, а не echo $result = curl_exec($curl); $error = curl_error($curl); $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); if (empty($result)) $result = ''; if ($error) $result .= 'err: '.$error; if ($http_code >= 400) $result .= 'err_http_code: '.$http_code; return $result; } private static function getHeaders(): array { return [ 'Host' => self::$host, 'Accept' => self::$accept, 'Device-OS' => self::$deviceOS, 'Device-Id' => self::$deviceId, 'clientVersion' => self::$clientVersion, 'Accept-Language' => self::$acceptLanguage, 'User-Agent' => self::$userAgent, ]; } private static function responseToArray(string $json): array { $result = json_decode($json, true); return empty($result) ? [ 'err' => 'impossible decode json', 'jsonText' => $json ] : $result; } public static function getCodeInSms(string $phone):array { $headers = self::getHeaders(); $response = self::request( 'https://'.self::$host.'/v2/auth/phone/request', [ 'phone' => $phone, 'client_secret' => self::$clientSecret, 'os' => self::$os ], $headers ); return (empty($response)) ? ['ok' => 1] : ['err' => $response]; } public static function getSessionId(string $phone, string $code): array { $headers = self::getHeaders(); $response = self::request( 'https://'.self::$host.'/v2/auth/phone/verify', [ 'phone' => $phone, 'client_secret' => self::$clientSecret, 'code' => $code, 'os' => self::$os ], $headers ); return self::responseToArray($response); /*[sessionId] [refresh_token]*/ } public static function refreshSessionId(string $refreshToken): array { $headers = self::getHeaders(); $response = self::request( 'https://'.self::$host.'/v2/mobile/users/refresh', [ 'refresh_token' => $refreshToken, 'client_secret' => self::$clientSecret, ], $headers ); return self::responseToArray($response); /*[sessionId] [refresh_token]*/ } public static function getTicketId(string $qr, string $sessionId): array { $headers = self::getHeaders(); $headers['sessionId'] = $sessionId; $response = self::request( 'https://'.self::$host.'/v2/ticket', ['qr' => $qr], $headers ); return self::responseToArray($response); /*[kind] => kkt [id] => 6628000000000 [status] => 2 [statusReal] => 2*/ } public static function getTicket(string $id, string $sessionId) { $headers = self::getHeaders(); $headers['Content-Type'] = 'application/json'; $headers['sessionId'] = $sessionId; $response = self::request( 'https://'.self::$host.'/v2/tickets/'.$id, [], $headers ); return self::responseToArray($response); } } // Tests //echo '<pre>'; // print_r(NalogQR::getCodeInSms('+7000000')); // print_r(NalogQR::getSessionId('+70000000', '0000')); // print_r(NalogQR::refreshSessionId('df60000170c')); // print_r(NalogQR::getTicketId('t=20240000641304194&n=1', '65a110000da6b')); // print_r(NalogQR::getTicket('6620000fb2c2', '65a10000317')); ```

Что за индексы в sql подобие primary index , какие есть ещё? и расскажи о каждом

В SQL индексы используются для ускорения доступа к данным в таблицах базы данных. Они похожи на индексы в книгах, где вы можете быстро найти нужную информацию, не просматривая всю книгу. Вот основные типы индексов в SQL: 1. **Primary Index (Первичный индекс)**: - Это уникальный индекс, который создается на первичном ключе таблицы. - Первичный ключ гарантирует уникальность значений в столбце или группе столбцов и обычно используется для идентификации каждой записи в таблице. - Пример: `CREATE TABLE students (id INT PRIMARY KEY, name VARCHAR(50));` 2. **Unique Index (Уникальный индекс)**: - Этот индекс гарантирует, что значения в столбце или группе столбцов уникальны, но не обязательно являются первичным ключом. - Может быть создан на столбцах, которые не являются первичным ключом, но должны иметь уникальные значения. - Пример: `CREATE UNIQUE INDEX idx_unique_email ON students (email);` 3. **Clustered Index (Кластерный индекс)**: - Кластерный индекс определяет физический порядок данных в таблице. - В таблице может быть только один кластерный индекс, так как он изменяет физическое расположение строк. - Обычно кластерный индекс создается на первичном ключе, если он не задан явно, то СУБД может выбрать другой столбец. - Пример: `CREATE CLUSTERED INDEX idx_cluster_student_id ON students (id);` 4. **Non-Clustered Index (Некластерный индекс)**: - Некластерный индекс создает отдельную структуру данных, которая указывает на физическое расположение данных в таблице. - В таблице может быть несколько некластерных индексов. - Они используются для ускорения поиска данных, но могут замедлить операции вставки, обновления и удаления, так как требуется обновление индексов. - Пример: `CREATE NONCLUSTERED INDEX idx_noncluster_student_name ON students (name);` 5. **Composite Index (Составной индекс)**: - Составной индекс создается на нескольких столбцах таблицы. - Он полезен, когда запросы часто используют комбинацию этих столбцов для фильтрации данных. - Пример: `CREATE INDEX idx_composite_name_age ON students (name, age);` 6. **Full-Text Index (Полнотекстовый индекс)**: - Полнотекстовый индекс используется для ускорения поиска текста в больших текстовых полях. - Он позволяет выполнять сложные поисковые запросы, такие как поиск по ключевым словам или фразам. - Пример: `CREATE FULLTEXT INDEX ON students (bio) KEY INDEX idx_unique_email;` 7. **Spatial Index (Пространственный индекс)**: - Пространственный индекс используется для оптимизации запросов, связанных с геометрическими данными. - Он позволяет быстро выполнять операции, такие как поиск ближайших объектов или определение пересечений. - Пример: `CREATE SPATIAL INDEX idx_spatial_location ON students (location);` 8. **XML Index (XML индекс)**: - XML индекс используется для оптимизации запросов к XML данным, хранящимся в базе данных. - Он позволяет быстро извлекать и обновлять XML документы. - Пример: `CREATE PRIMARY XML INDEX idx_xml_data ON students (xml_data);` Каждый тип индекса имеет свои особенности и подходит для разных сценариев использования. Выбор правильного типа индекса может значительно улучшить производительность ваших SQL запросов.

Показать gpt весь проект

# Смотреть сразу все файлы и папки проекта ``` tree && find ./ -type f -exec sh -c 'echo "Содержимое файла: $1:"; cat "$1"' _ {} \; ``` или в файл ``` tree && find ./ -type f -exec sh -c 'echo "Содержимое файла: $1:"; cat "$1"' _ {} \; >> ~/projectForGPT.txt ```

Что лучше использовать в golang проекте для rest api ? Gin, Echo или net/http?

В проекте на Go для создания REST API можно использовать несколько фреймворков, каждый из которых имеет свои преимущества. Вот краткое сравнение Gin, Echo и стандартной библиотеки `net/http`: 1. **Gin**: - **Производительность**: Gin является одним из самых быстрых фреймворков для Go. - **Легковесный**: Gin имеет минимальный набор функций, что делает его легким в использовании и настройке. - **Удобство использования**: Gin предлагает множество встроенных функций, таких как валидация, логгирование, и работа с JSON. - **Мобильная поддержка**: Gin хорошо подходит для разработки мобильных приложений благодаря своей производительности и удобству. 2. **Echo**: - **Производительность**: Echo также известен своей высокой производительностью, сравнимой с Gin. - **Удобство использования**: Echo предлагает простой и понятный API, а также множество встроенных функций, таких как маршрутизация, валидация и обработка запросов. - **Расширяемость**: Echo легко расширяется за счет подключаемых модулей и плагинов. - **Оптимизация**: Echo оптимизирован для работы с большим количеством запросов и может быть хорошим выбором для высоконагруженных приложений. 3. **net/http**: - **Стандартная библиотека**: Использование `net/http` означает, что вы работаете напрямую с стандартной библиотекой Go, что может быть полезно для понимания низкоуровневых деталей работы HTTP-сервера. - **Полный контроль**: Работая напрямую с `net/http`, вы имеете полный контроль над каждым аспектом вашего сервера. - **Минималистичный**: `net/http` не предлагает дополнительных функций, таких как маршрутизация или валидация, которые предоставляют фреймворки Gin и Echo. - **Требует больше кода**: Для создания REST API с использованием только `net/http` потребуется написать больше кода, чем при использовании фреймворков. Выбор между Gin, Echo и `net/http` зависит от конкретных требований вашего проекта. Если вам нужна высокая производительность и удобство использования, то Gin или Echo будут хорошим выбором. Если вам нужен полный контроль и вы хотите работать напрямую с низкоуровневыми аспектами HTTP, то `net/http` может быть лучшим вариантом.

Температура arch linux

sudo pacman -S lm_sensors sudo sensors-detect yes sensors для windows Core Temp 1.18.1 https://www.alcpu.com/CoreTemp/

Настройка блокировки изменения шрифта в webview при изменении размера шрифта в android

сработала как я понял эта настройка в котлине для webview: webView.settings.textZoom = 100 Настройка блокировки изменения шрифта в webview при изменении размера шрифта в android: 1. Настройка WebView в Kotlin Можно настроить параметры WebView в Kotlin, чтобы игнорировать системные настройки масштабирования текста. Для этого можно использовать метод setTextZoom и установить его на 100%. Пример кода: val webView: WebView = findViewById(R.id.webview) webView.settings.textZoom = 100 2. Установка параметров в HTML и CSS Вы также можете использовать CSS для контроля за масштабированием шрифтов внутри самого HTML. Один из способов - использовать -webkit-text-size-adjust и text-size-adjust в CSS, установив их значение в 100%. Пример CSS: body { -webkit-text-size-adjust: 100%; /* Для WebKit-браузеров (включая WebView) */ text-size-adjust: 100%; /* Для остальных браузеров */ } 3. Использование viewport в HTML Использование тега <meta> в HTML также может помочь контролировать масштабирование: <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

golang go-sql-driver/mysql или lib/pq ?

При выборе между `github.com/go-sql-driver/mysql` и `lib/pq` для работы с базами данных, важно учитывать несколько аспектов, включая безопасность, стабильность, поддержку и совместимость с конкретными СУБД. 1. **github.com/go-sql-driver/mysql:** - **Безопасность:** Этот драйвер широко используется и хорошо документирован. Он поддерживает различные механизмы безопасности, такие как SSL для защиты данных во время передачи. - **Стабильность:** Драйвер имеет большую базу пользователей и активно поддерживается сообществом. - **Совместимость:** Он предназначен для работы с MySQL и MariaDB. MariaDB является ответвлением MySQL и обычно хорошо поддерживается драйверами MySQL. 2. **lib/pq (официальный драйвер PostgreSQL):** - **Безопасность:** Как официальный драйвер PostgreSQL, он также поддерживает различные механизмы безопасности, включая SSL. - **Стабильность:** Этот драйвер является официальным и поддерживается командой PostgreSQL, что обеспечивает высокую стабильность и надежность. - **Совместимость:** Он предназначен для работы с PostgreSQL и не предназначен для использования с MariaDB или MySQL. **Вывод:** - Если вы работаете с MySQL или MariaDB, `github.com/go-sql-driver/mysql` будет более подходящим выбором, так как он специально разработан для этих СУБД. - `lib/pq` предназначен для PostgreSQL и не подходит для MariaDB. **Безопасность и стабильность:** - Оба драйвера имеют хорошую репутацию в отношении безопасности и стабильности. Однако, поскольку `lib/pq` является официальным драйвером PostgreSQL, он может быть более предпочтительным для использования с PostgreSQL из-за прямой поддержки со стороны команды PostgreSQL. - `github.com/go-sql-driver/mysql` также является надежным и безопасным решением для MySQL и MariaDB, благодаря широкой базе пользователей и активной поддержке сообщества. **Рекомендация:** - Выбирайте `github.com/go-sql-driver/mysql` для работы с MariaDB, так как он специально разработан для этой СУБД и имеет хорошую поддержку и стабильность. - Для PostgreSQL используйте `lib/pq`, так как это официальный драйвер, который обеспечивает высокую совместимость и поддержку.

Промпт для Chat-GPT в Роли Психолога, Специализирующегося на Программировании

Ты - квалифицированный психолог с глубокими знаниями в области программирования. Твоя задача - помогать клиентам решать психологические проблемы, связанные с работой в IT-сфере, а также использовать свои технические навыки для более эффективного общения и решения специфических проблем. **Основные Аспекты Роли:** 1. **Активное Слушание и Понимание:** - Ты внимательно слушаешь клиентов, понимаешь их проблемы и чувства, связанные с работой программиста. - Используешь свои знания о специфических трудностях, с которыми сталкиваются программисты (например, стресс от срочных проектов, проблемы с командной работой). 2. **Коучинг и Навыки Управления Стрессом:** - Предоставляешь стратегии и техники для управления стрессом, установления границ, повышения эффективности и улучшения взаимодействия в команде. - Используешь примеры из мира программирования для иллюстрации своих советов. 3. **Технологические Решения:** - Предлагаешь использовать различные инструменты и приложения, которые могут помочь в управлении временем, коммуникациями и проектной деятельностью. - Обсуждаешь возможности использования AI и других технологий для улучшения качества жизни и работы. 4. **Консультирование по Карьере:** - Оказываешь поддержку в определении карьерных целей, выборе направления развития и решении проблем, связанных с карьерой в IT. - Предоставляешь информацию о различных путях развития в программировании и связанных с ним областях. 5. **Этика и Безопасность:** - Уделяешь особое внимание конфиденциальности и безопасности информации, особенно когда речь идет о профессиональных проблемах клиентов. - Обсуждаешь вопросы этики в программировании и обеспечиваешь, чтобы клиенты понимали важность этических аспектов в их профессиональной деятельности. **Примеры Вопросов/Задач:** - Как можно эффективно управлять стрессом во время срочных проектов? - Какие стратегии можно использовать для улучшения взаимодействия в дистанционной команде? - Как определить правильное направление развития в мире программирования? - Какие технологии могут помочь в улучшении рабочего процесса и качества жизни программиста? **Ваша Реакция:** - Ты предоставляешь конкретные, обоснованные и современные советы, основанные на психологических принципах и последних достижениях в области программирования. - Ты поддерживаешь клиентов в их стремлении к самосовершенствованию и профессиональному росту, используя свой опыт и знания.

Как поменять свой пароль на mariadb?

Если вы столкнулись с ошибкой `ERROR 1698 (28000): Access denied for user 'root'@'localhost'` или аналогичной, это означает, что вам было отказано в доступе к MariaDB из-за неправильного пароля или недостаточных прав. Важно понимать, что пароли к базам данных являются конфиденциальной информацией, и их нельзя просто так "узнать". Однако есть несколько способов решить эту проблему: 1. **Использование существующего пароля**: Если вы или кто-то другой установили MariaDB и создали пользователя root с паролем, вам нужно будет вспомнить или узнать этот пароль. Если вы не помните пароль, но знаете, что он был установлен, попробуйте вспомнить или спросить у того, кто мог его установить. 2. **Сброс пароля root**: Если вы являетесь администратором системы и забыли пароль root для MariaDB, вы можете сбросить его. Вот как это можно сделать: - **Запустите MariaDB в режиме без пароля**: Для этого вам нужно перезапустить сервер MariaDB с параметром `--skip-grant-tables`. Это позволит вам войти в систему без пароля. ```bash sudo systemctl stop mariadb sudo mysqld_safe --skip-grant-tables & ``` - **Войдите в MariaDB без пароля**: Теперь вы можете войти в MariaDB без пароля: ```bash mysql -u root ``` - **Сбросьте пароль**: Выполните следующие команды внутри MySQL: ```sql USE mysql; UPDATE user SET password=PASSWORD('your_new_password') WHERE User='root'; FLUSH PRIVILEGES; ``` Замените `your_new_password` на новый пароль, который вы хотите установить. - **Перезапустите MariaDB нормально**: После сброса пароля перезапустите MariaDB обычным способом: ```bash sudo systemctl start mariadb ``` 3. **Использование пользователя с ограниченными правами**: Если у вас нет прав администратора, но вам нужно подключиться к базе данных, попросите администратора предоставить вам доступ с ограниченными правами. 4. **Восстановление из резервной копии**: Если вы не можете получить доступ к базе данных и не можете сбросить пароль, возможно, вам придется восстановить базу данных из последней резервной копии, если она доступна. Всегда помните, что управление паролями и доступом к базам данных должно быть безопасным и контролироваться только авторизованными лицами.

golang чтение конфига из json

``` package configs import ( "encoding/json" "io/ioutil" "os" //"log" ) func Get(name string) (map[string]interface{}, error) { var config map[string]interface{} var path = "configs/" + name + ".json" // Проверка на существование файла if _, err := os.Stat(path); os.IsNotExist(err) { return config, err } // Читаем файл data, err := ioutil.ReadFile(path) if err != nil { return config, err } // С Json в map err = json.Unmarshal(data, &config) if err != nil { return config, err } return config, nil } ```

ubuntu как посмотреть все запущенные systemctl службы?

В Ubuntu, чтобы посмотреть все запущенные службы, управляемые `systemctl`, вы можете использовать следующую команду: ```bash systemctl list-units --type=service --state=running ``` Эта команда выполняет следующие действия: - `systemctl list-units` - выводит информацию о загруженных юнитах. - `--type=service` - фильтрует результаты, чтобы показать только службы. - `--state=running` - фильтрует результаты, чтобы показать только те службы, которые в настоящее время запущены. Также вы можете использовать более короткую команду: ```bash systemctl list-units --type=service --all ``` Эта команда покажет все службы, включая запущенные и остановленные, но для фильтрации только запущенных служб, используйте первую команду.

Альтернативы Замена Docker Это Podman

Podman sudo yum install podman podman run hello-world

ssh передача файлов

https://www.youtube.com/watch?v=mGOfQj_0-0I Видео ssh scp откуда куда ssh scp root@domen:/root/log.txt log.txt # Принять scp -P 12345 user@server:/path/to/remote/file /path/to/local/file scp -r -P 12345 user@server:/path/to/remote/dir/* /path/to/local/dir/ # Отправить scp -r -P 12345 /home/admin/Desktop/bot5/ root@188.200.200.200:/root/bot5 Но ошибка scp: stat local "/home/admin/Desktop/bot5/": No such file or directory

Какое максимальное количество цифр может содержать порт?

В компьютерных сетях порт - это логическая единица, которая используется для идентификации конкретного приложения или службы, работающей на хосте. Порты в сетях TCP/IP обозначаются числами от 0 до 65535. Порты с номерами от 0 до 1023 называются "известными" или "системными" портами и обычно используются для стандартных служб, таких как HTTP (порт 80), HTTPS (порт 443), FTP (порт 21) и других. Порты с номерами от 1024 до 49151 называются "регистрированными" портами и могут использоваться для конкретных приложений или служб, которые зарегистрированы в Internet Assigned Numbers Authority (IANA). Порты с номерами от 49152 до 65535 называются "динамическими" или "приватными" портами и обычно используются для временных соединений между хостами. Таким образом, максимальное количество цифр, которое может содержать порт, равно 5 (от 00000 до 65535).

tcp или udp - в чём отличие?

TCP (Transmission Control Protocol) и UDP (User Datagram Protocol) — это два основных протокола транспортного уровня в модели OSI, которые используются для передачи данных через сети, включая Интернет. Вот основные различия между ними: 1. **Надежность**: - **TCP** обеспечивает надежную передачу данных, используя механизмы подтверждения получения пакетов, повторной передачи потерянных пакетов и упорядочивания пакетов в правильном порядке. Это гарантирует, что данные будут доставлены целиком и без ошибок. - **UDP** не обеспечивает надежной передачи данных. Он не подтверждает получение пакетов и не гарантирует их порядок. Если пакеты теряются или повреждаются, UDP не предпринимает попыток их восстановить. 2. **Задержка**: - **TCP** может вносить больше задержек из-за механизмов управления потоком и надежности, таких как трехстороннее рукопожатие (три прохода для установления соединения) и контрольные суммы. - **UDP** обычно быстрее, так как не требует установления соединения и не имеет механизмов, которые могли бы замедлить передачу данных. 3. **Соединение**: - **TCP** является соединительным протоколом, что означает, что перед тем, как начать передавать данные, необходимо установить соединение (процесс, известный как "трехстороннее рукопожатие"). - **UDP** является безсоединительным протоколом, и данные могут быть отправлены сразу, без предварительной установки соединения. 4. **Использование**: - **TCP** обычно используется для приложений, требующих надежной передачи данных, таких как веб-серверы (HTTP/HTTPS), электронная почта (SMTP, POP3, IMAP), и файловые серверы (FTP). - **UDP** часто используется для приложений, где скорость важнее надежности, или когда потеря пакетов не критична, например, для потокового видео, аудио (VoIP), онлайн-игр и DNS. В контексте домашнего web-сервера, как правило, используется TCP, так как на

Golang структура Архитектура

https://www.youtube.com/watch?v=B0lV7I3FO4E Пример разработки 1 https://www.youtube.com/watch?v=mr3pywHOz7I 2 https://www.youtube.com/watch?v=RHatXuBXckM https://github.com/golang-standards/project-layout/ 1 пример https://github.com/evrone/go-clean-template/tree/master 2 пример // Точка входа cmd -app --main.go -parse --main.go для крона build /configs/main.yml /internal/ (внутренний)1.4 Своё, что под запретом для публикации + Основная бизнес логика /internal/app/app.go /pkg/ Доступно для скачивания другим + клиенские библиотеки /docs/ (авто-генерация через swagger) // Структуры и их методы /internal/models/ // Слой комуникации транспорта /internal/delivery/http/handler.go /internal/delivery/grpc/ // Для основной бизнес логики /internal/service/ // Хранилище для работы с базами (mongoDB top) /internal/repository/ /internal/repository/mongodb/ // Берёт данные с /configs/main.yml /internal/config/config.go /internal/config/config_test.go // Сервер /server/server.go - /cmd - /yourappname - /internal - /handlers - /models - /services - /static - /css - /js - /images - /templates - go.mod - go.sum - main.go // php index.php config -database.php -constants.php includes templates -header.php -footer.php -home.php -product.php -cart.php assets/ - папка с ресурсами, такими как изображения, стили CSS, скрипты JavaScript и т.д. admin -index.php -products.phpудаление). -orders.php uploads Для создания проекта REST API на Go, рекомендуется использовать следующую структуру файлов и папок: ```go /myproject /api /v1 /handlers handlers.go /models models.go /repositories repositories.go /services services.go /middlewares middlewares.go /v2 (аналогична структуре v1) /configs config.go /db db.go /pkg /utils utils.go main.go ``` Вот краткое описание структуры: 1. `/myproject`: корневая директория проекта. 2. `/api`: директория, содержащая код, связанный с API. * `/v1`, `/v2`: директории для различных версий API. + `/handlers`: обработчики маршрутов и запросов. + `/models`: модели данных и схемы. + `/repositories`: слой работы с базой данных и доступа к данным. + `/services`: слой бизнес-логики, объединяющий обработчики и репозитории. + `/middlewares`: мидлвары для обработки запросов и ответов. 3. `/configs`: конфигурационные файлы и код для настройки приложения. 4. `/db`: код, связанный с подключением к базе данных и ее управлением. 5. `/pkg/utils`: вспомогательные функции и утилиты, которые могут использоваться в разных частях проекта. 6. `main.go`: точка входа в приложение, инициализация маршрутизации и запуск сервера. Эта структура позволяет организовать код логично и поддерживать чистоту проекта, а также упрощает процесс разработки и поддержки.

публичнвй сайт на телефоне через termux

ngrok.com mkdir ngrok cd ngrok/ git clone https://github.com/tchelospy/termux-ngrok.git cd termux-ngrok/ chmod +x termux-ngrok.sh ./termux-ngrok.sh ngrok http 3000

reboot для перезагрузки, а для выключения? linux

Для выключения системы в Linux, вы можете использовать команду `shutdown`. Вот несколько примеров того, как можно выключить систему с помощью различных вариантов команды `shutdown`: 1. **Выключить систему немедленно**: ```bash sudo shutdown -h now ``` 2. **Выключить систему в определенное время**: ```bash sudo shutdown -h 22:00 ``` Это выключит систему в 22:00. 3. **Выключить систему через определенное количество минут**: ```bash sudo shutdown -h +10 ``` Это выключит систему через 10 минут. 4. **Выключить систему с уведомлением пользователей**: ```bash sudo shutdown -h +10 "Система будет выключена через 10 минут для профилактических работ." ``` Если вы хотите перезагрузить систему, используйте `-r` вместо `-h`: ```bash sudo shutdown -r now ``` Убедитесь, что у вас есть права администратора (используйте `sudo`), так как обычно пользователи без прав администратора не могут выключать или перезагружать систему.

golang в каком виде и формате лучше хранить конфиги?

Выбор формата для хранения конфигурационных файлов зависит от конкретных требований вашего проекта, но есть несколько общих рекомендаций, которые могут помочь вам сделать правильный выбор: 1. **JSON**: - **Преимущества**: Встроенная поддержка в Go, легкость чтения и записи, хорошо подходит для структурных данных. - **Недостатки**: Не очень удобен для редактирования человеком, так как требует строгой вложенности и синтаксиса. 2. **YAML**: - **Преимущества**: Более читабелен для человека по сравнению с JSON, поддерживает комментарии, прост в использовании для сложных структур данных. - **Недостатки**: Требует установки дополнительной библиотеки в Go для работы с YAML, может быть более сложным в обработке из-за поддержки более сложных структур. 3. **TOML**: - **Преимущества**: Простой для чтения и написания, хорошо подходит для конфигурационных файлов, поддерживает комментарии. - **Недостатки**: Меньшая распространенность по сравнению с JSON и YAML, может потребовать установки дополнительной библиотеки в Go. 4. **INI**: - **Преимущества**: Простой и легкий для понимания формат, хорошо подходит для простых конфигураций. - **Недостатки**: Не поддерживает вложенные структуры, ограничен в возможностях по сравнению с другими форматами. 5. **HCL (HashiCorp Configuration Language)**: - **Преимущества**: Удобен для написания и чтения, поддерживает динамические выражения, используется в продуктах HashiCorp. - **Недостатки**: Требует установки дополнительной библиотеки в Go, менее распространен, чем JSON и YAML. **Рекомендации**: - Если ваш проект на Go и вы предпочитаете использовать только стандартную библиотеку, то JSON может быть лучшим выбором. - Если вам нужна более человекочитаемая структура и вы не против установки дополнительной библиотеки, YAML или TOML могут быть хорошим выбором. - Если ваш проект связан с продуктами HashiCorp, то HCL может быть наиболее подходящим. В конечном итоге, выбор формата зависит от ваших предпочтений и требований к проекту. Важно выбрать формат, который будет удобен для редактирования и поддержки в течение всего жизненного цикла проекта.

Приёмник json receiver golang

```go package main import ( "encoding/json" "fmt" "log" ) func main() { // Пример JSON, который мы хотим распарсить jsonData := `{"name": "John", "age": 30, "city": "New York", "list":["a","b"], "listB":{"a":"c"}}` // Чтение JSON в байтовый срез var data map[string]interface{} err := json.Unmarshal([]byte(jsonData), &data) if err != nil { log.Fatal(err) } // Проверка на существование каждого элемента for key := range data { fmt.Printf("Key: %s, Value: %v\n", key, data[key]) } // Если нужно проверить наличие конкретного ключа keyToCheck := "name" if val, ok := data[keyToCheck]; ok { fmt.Printf("Key '%s' found, value: %v\n", keyToCheck, val) } else { fmt.Printf("Key '%s' not found\n", keyToCheck) } // fmt.Println(data["listB"]["a"]) // Проверка типа значения перед индексированием listB, ok := data["listB"].(map[string]interface{}) if !ok { log.Fatalf("Expected 'listB' to be a map, but got %T", data["listB"]) } value, ok := listB["a"] if !ok { log.Fatalf("Key 'a' not found in 'listB'") } fmt.Println("Value of 'a' in 'listB':", value) list, ok := data["list"].([]interface{}) if !ok { log.Fatalf("111") } fmt.Println("Value in 'list[0]':", list[0]) } ```

golang определить ананимный тип заполнить сразу данными и преобразовать в json строку

В Go (Golang) вы можете определить анонимный тип и сразу заполнить его данными, а затем преобразовать в JSON строку. Для этого вам понадобится использовать пакет `encoding/json`. Вот пример того, как это можно сделать: ```go package main import ( "encoding/json" "fmt" ) func main() { // Определение анонимного типа и заполнение данными data := struct { Name string `json:"name"` Age int `json:"age"` }{ Name: "John Doe", Age: 30, } // Преобразование в JSON строку jsonData, err := json.Marshal(data) if err != nil { fmt.Println("Ошибка при маршалинге в JSON:", err) return } // Вывод JSON строки fmt.Println(string(jsonData)) } ``` В этом примере: 1. Определяется анонимный тип с полями `Name` и `Age`. 2. Экземпляр этого анонимного типа создается и заполняется данными. 3. Используется функция `json.Marshal` для преобразования этого экземпляра в JSON строку. 4. Выводится результат. Когда вы запустите этот код, он выведет: ```json {"name":"John Doe","age":30} ``` Этот подход позволяет динамически определять структуры данных и легко их сериализовывать в JSON.

Golang запросы на другой сервер

package main import ( "bytes" //"encoding/json" "fmt" "log" "net/http" "io" ) func main() { fmt.Println("Запуск успешный!") var jsonStr = []byte(`{"key":"value"}`) / // Простой запрос responce, err := http.Post( "https://h7team.ru/tests/saveRequests.php", "application/json", bytes.NewBuffer(jsonStr), ) CheckErr(err) defer responce.Body.Close() fmt.Println(responce) */ //fmt.Println(responce.Body) // Запрос с заголовками // Создаем новый запрос request, err := http.NewRequest( "POST", "https://bot2.joyeshop.ru/tests/saveRequests/saveRequests.php", bytes.NewBuffer(jsonStr), ) CheckErr(err) request.Header.Set("Content-Type", "application/json") request.Header.Add("Authorization", "Bearer your_token_here") // Делаем запрос client := &http.Client{} responce, err := client.Do(request) CheckErr(err) defer responce.Body.Close() // Читаем ответ responceBody, err := io.ReadAll(responce.Body) CheckErr(err) // Выводим содержимое ответа fmt.Println(string(responceBody)) } func CheckErr(err error) { if err != nil { log.Fatal(err) } }

golang server api для json общения

https://www.youtube.com/watch?v=5zOfVYBDz_o видео # Переделал ``` package main import ( "fmt" "log" "net/http" "encoding/json" //"strconv" ) type User struct { Name string Age int } var users []User func main() { http.HandleFunc("/users", userHendler) fmt.Println("Server start") err := http.ListenAndServe("localhost:3000", nil) if err != nil { log.Fatal(err) } } func userHendler(writer http.ResponseWriter, request *http.Request) { switch request.Method { case http.MethodGet: getUser(writer, request) case http.MethodPost: postUser(writer, request) default: http.Error( writer, "method not exists:"+request.Method, http.StatusMethodNotAllowed, ) } } func getUser(writer http.ResponseWriter, request *http.Request) { json.NewEncoder(writer).Encode(users) //fmt.Fprintf(writer, "get users: %v", users) } func postUser(writer http.ResponseWriter, request *http.Request) { var user User err := json.NewDecoder(request.Body).Decode(&user) if err != nil { http.Error( writer, err.Error(), http.StatusInternalServerError, ) return } users = append(users, user) // Отправляем JSON клиенту writer.Header().Set("Content-Type", "application/json") json.NewEncoder(writer).Encode(map[string]interface{}{ "ok": 1, "UserName": user.Name, }) } ``` # JS для проверки ``` js // POST fetch('http://localhost:3000/users', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({name: 'John', age: 30}), }) .then(response => response.json()) .then(data => console.log('Success:', data)) .catch((error) => console.error('Error:', error)); // GET fetch('http://localhost:3000/users') .then(response => response.json()) .then(data => console.log('Success:', data)) .catch((error) => console.error('Error:', error)); ``` # My old ``` package main import ( "fmt" "log" "net/http" "strconv" ) var n int func main() { http.HandleFunc("/telegramReceiver", telegramReceiver) fmt.Println("Server start") err := http.ListenAndServe("localhost:3000", nil) if err != nil { log.Fatal(err) } } func telegramReceiver(w http.ResponseWriter, r *http.Request) { n++ http.Error(w, "good error"+strconv.Itoa(n), http.StatusMethodNotAllowed) } ``` # Пример ещё проще на отдачу текста ``` package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", HelloServer) http.ListenAndServe(":8080", nil) // err := http.ListenAndServeTLS(":3020", "cert.pem", "key.pem", nil) } func HelloServer(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, %s!", r.URL.Path[1:]) } ```

Linux browser браузер links

links - нет ввода и русских символов w3m http://localhost:3000 w3m h7team.ru Выйти q y

nginx conf for localhost

``` server { listen 80; server_name site1.ru www.site1.ru 111.111.111.22; access_log off; error_log off; return 301 https://site1.ru$request_uri; } server { listen 443 ssl; server_name www.site1.ru 188.120.239.22; ssl_certificate /etc/letsencrypt/live/site1.ru-0001/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/site1.ru-0001/privkey.pem; access_log off; error_log off; return 301 https://site1.ru$request_uri; } server { listen 443 ssl; server_name site1.ru; server_name_in_redirect off; ssl_certificate /etc/letsencrypt/live/site1.ru-0001/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/site1.ru-0001/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; access_log /var/log/nginx/site1/access.log; error_log /var/log/nginx/site1/error.log; root /var/www/react/www; index index.html index.php; error_page 404 = /404; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_pass https://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; # Not cache add_header Last-Modified $date_gmt; add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0'; add_header Pragma "no-cache"; if_modified_since off; expires off; etag off; } location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|json|css|txt|pdf|mp3|ogg|mpe?g|avi|zip|7z|gz|bz2?|rar|ttf|otf|csv|webp|webm|woff|woff2|mp4|xlsx|xls|ai|cdr|tif|eps)$ { access_log off; expires max; } } ```

golang Объект структуры без объявлений

golang можно ли не обьявлять структуру, а сразу создавать обьект с этой структурой? Да, в Go можно создать объект (экземпляр структуры) без предварительного объявления структуры. Это называется анонимной структурой. Вот пример: ```go package main import "fmt" func main() { person := struct { name string age int }{ name: "John", age: 30, } fmt.Println(person) } ``` В этом примере мы создаем анонимную структуру `person` с полями `name` и `age`, и сразу инициализируем их значениями. Однако, использование анонимных структур ограничено, так как они не могут быть использованы повторно и не могут быть сериализованы или десериализованы. Для повседневного использования рекомендуется объявлять структуры явно.

cassandra NoSQL

https://cassandra.apache.org/ Официальный сайт # Установка на ubuntu ``` curl -o /etc/apt/keyrings/apache-cassandra.asc https://downloads.apache.org/cassandra/KEYS echo "deb [signed-by=/etc/apt/keyrings/apache-cassandra.asc] https://debian.cassandra.apache.org 41x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list sudo apt-get update sudo apt-get install cassandra sudo systemctl restart --all sudo service cassandra status sudo service cassandra start nodetool status cqlsh // OR cqlsh localhost ``` на Fedora ``` sudo dnf update sudo dnf install java-1.8.0-openjdk-devel wget https://dlcdn.apache.org/cassandra/4.1.4/apache-cassandra-4.1.4-bin.tar.gz tar -xvzf apache-cassandra-4.1.4-bin.tar.gz cd apache-cassandra-4.1.4 ``` Открываем nano ~/.bashrc OR nano ~/.bash_profile и в конец добавляем ``` export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk export CASSANDRA_HOME=/home/admin/apache-cassandra-4.1.4 export PATH=$PATH:$CASSANDRA_HOME/bin ``` Принять изменения source ~/.bashrc OR source ~/.bash_profile Доустановка модулей sudo dnf install python3-pip pip3 install six pip3 install cassandra-driver sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm sudo dnf install https://repo.ius.io/ius-release-el9.rpm sudo dnf install python39 sudo dnf install python39-pip python3.9 --version Запуск cassandra http://localhost:7199/ Узнать работает ли nodetool status UN - активен Консоль для команд cqlsh либо /usr/bin/python3.9 ~/apache-cassandra-4.1.4/bin/cqlsh # Остановка ``` nodetool stopdaemon OR nodetool stop OR ~/apache-cassandra-4.1.4/bin/nodetool stopdaemon ``` # Остались вопросы - Как создать бэкап? - Как восстановить бэкап? - Как перенести бэкап? - В каком виде там всё хранится?

golang cassandra

Создание собственного клиента командной строки для Apache Cassandra на Go (Golang) требует использования библиотеки `gocql`, которая предоставляет интерфейс для взаимодействия с кластерами Cassandra. Вот основные шаги для создания простого клиента командной строки: 1. Установите `gocql` с помощью `go get`: ```go go get github.com/gocql/gocql ``` 1. Создайте новый файл `main.go` и импортируйте необходимые пакеты: ```go package main import ( "fmt" "os" "github.com/gocql/gocql" ) ``` 1. Создайте функцию подключения к кластеру Cassandra: ```go func connectToCluster(cluster *gocql.ClusterConfig) (*gocql.Session, error) { session, err := cluster.CreateSession() if err != nil { return nil, err } return session, nil } ``` 1. Создайте функцию для выполнения запроса: ```go func executeQuery(session *gocql.Session, query string) { iterable := session.Query(query).Iter() for iterable.Scan() { var result string iterable.Scan(&result) fmt.Println(result) } if err := iterable.Close(); err != nil { fmt.Println("Ошибка при выполнении запроса:", err) } } ``` 1. В функции `main` создайте конфигурацию кластера и подключитесь к нему: ```go func main() { cluster := gocql.NewCluster("127.0.0.1") // Замените на адрес вашего кластера cluster.Keyspace = "your_keyspace" // Замените на имя вашего keyspace cluster.Consistency = gocql.Quorum session, err := connectToCluster(cluster) if err != nil { fmt.Println("Ошибка при подключении к кластеру:", err) os.Exit(1) } defer session.Close() // Пример запроса query := "SELECT * FROM your_table" // Замените на ваш запрос и таблицу executeQuery(session, query) } ``` 1. Запустите ваш новый клиент командной строки: ```go go run main.go ``` Этот пример создает простой клиент командной строки для выполнения запросов к Apache Cassandra. Вы можете расширить его, добавив поддержку аргументов командной строки, обработку ошибок и другие функции, которые могут быть полезны для вашего приложения.

Как победить прокрастинацию

Если есть задача на 2 минуты, сделай это сейчас Если что-то не хочешь делать, но надо, то выдели на это только 2 минуты

НЕЙРОГРАФИКА

https://youtube.com/watch?v=vvAoG8kSy0I Чел подробно объясняет правила https://youtube.com/watch?v=i0J-QA9UEj0 Быстро https://youtube.com/watch?v=vK5dp7TpaQc Значения фигур **Нейрографика** — это творческий метод, который сочетает в себе элементы психологии и искусства, направленный на гармонизацию внутреннего состояния и решение личных проблем через процесс рисования. Вот несколько основных правил нейрографики, которые помогут вам правильно рисовать: - Интеграция через связывание линий: Важно создавать изображения, связывая линии и скругляя их. Это помогает интегрировать различные части рисунка и символизирует взаимосвязь различных аспектов жизни. - Спонтанность: Рисунок должен рождаться спонтанно, отражая эмоции и переживания. Это позволяет выразить и освободиться от неприятных воспоминаний, навязчивых мыслей и страхов. - Отсутствие критериев оценки: В нейрографике нет правильных или неправильных рисунков. Важен сам процесс творчества и личное восприятие. - Снятие внутренних ограничений: Через рисование можно снимать внутренние ограничения, накопленные за годы жизни, и тем самым способствовать личностному росту. - Использование цвета: Цвета могут использоваться для передачи и усиления определенных эмоций и состояний. - Проблема и решение: В нейрографике считается, что проблема является порождением разума, а решение уже существует и может быть найдено через творческий процесс. - Нейролинии не должны повторяться на всем своем пути, вести линию в противоположном направлении своего желания. (Рука и мозг хочет повернуть линию влево – уводишь вправо) Эти правила могут служить отправной точкой для тех, кто хочет попробовать нейрографику. Важно помнить, что каждый человек уникален, и ваш подход к нейрографике может со временем развиваться и изменяться. # Метод Павла Пискарева - Выбрать тему для проработки (здоровье, деньги, бизнес) должно быть напряжение между тем как есть и как я хочу. Сконцентрироваться на цели, проблеме, увеличить напряжение (потенциал) - Катарсис (выплеснуть напряжение на холст нарисовав линии на счёт 3) - Округление всех углов - Интеграция (зарисовка разными цветами внутренние полости) Дорисовать линии чтобы общая картина слилась с фоном, не выделялась сильно - Нарисовать силовые линии поля в одной плоскости либо вертикально либо горизонтально но не сеткой (нарисовать менее волнообразные жирные линии проходящие через весь холст и их пересечения тоже скруглить) Рекомендуется нарисовать от 3 до 5 штук. - Вербализация (посмотреть на проблему со стороны), могут прийти инсайды. Какие пришли решения проблемы, что я думаю о проблеме теперь. # Альтернативный алгоритм - Тема: Определите тему или проблему, над которой вы хотите работать с помощью нейрографики. Запишите её на листочке. Далее засеките 2 минуты и в течении этого времени не задумываясь выписывайте любые ассоциации, слова, предложения связанные с этой темой. - Выброс: Начните рисовать, выражая свои эмоции и чувства. Это может быть спонтанный набросок или более осмысленные линии, отражающие ваше внутреннее состояние. - Скругление: Пройдитесь по всем острым углам и скруглите их. Это помогает снять внутреннее напряжение и создать более гармоничное изображение. - Интеграция: Соедините отдельные части рисунка, чтобы создать целостное изображение. Это символизирует интеграцию различных аспектов вашей жизни или проблемы. - Линии поля: Добавьте вокруг вашего рисунка жирные линии, которые будут символизировать границы вашего личного пространства или энергетического поля. - Работа с цветом: Используйте цвета для выражения и усиления определенных эмоций или состояний. Цвета могут помочь визуализировать изменения и добавить глубины рисунку. - Рефлексия: После завершения рисунка проведите время, размышляя о его значении и о том, как он отражает вашу работу над темой или проблемой. - Доработка: Внесите в рисунок изменения, если они необходимы, чтобы лучше отразить вашу цель или улучшить его эстетику. - Практика и повторение: Регулярно практикуйте нейрографику, чтобы улучшить свои навыки и глубже понять влияние этого метода на вашу жизнь и самочувствие. Этот алгоритм является основой для всех нейрографических рисунков и может быть адаптирован в зависимости от конкретной цели или задачи. # Геометрические фигуры для усиления эффекта В нейрографике каждая геометрическая фигура имеет свое символическое значение и используется для отражения определенных психологических аспектов: - Треугольник символизирует активность, движение и энергию изменений. Он также может представлять конфликт, опасность и лидерский принцип. Треугольники используются для включения динамики в рисунок и могут отражать агрессивность или направленность на достижение целей. - Квадрат олицетворяет стабильность, устойчивость и основательность. Эта фигура применяется, когда требуется заякорить ситуацию и почувствовать себя в ней более уверенно. Квадраты могут использоваться для создания ощущения безопасности и поддержки. - Круг представляет гармонию, целостность и безопасность. Круги могут использоваться для создания ощущения защищенности и внутреннего спокойствия. Они также ассоциируются с жизненной силой и позитивом. При использовании этих фигур в нейрографике важно помнить о их символическом значении и применять их в соответствии с личными целями и задачами, которые вы ставите перед собой в процессе рисования. Например, если вы хотите проработать вопросы, связанные с активностью и достижением целей, можно активно использовать треугольники. Для укрепления чувства стабильности и надежности можно включить в композицию квадраты. А для достижения гармонии и целостности — круги. # Ошибки при рисовании нейрографики - Ожидание мгновенных результатов: Не стоит ожидать, что сразу после первого рисунка вы получите идеальный результат. Нейрографика требует практики и терпения. - Копирование без понимания: Простое копирование рисунков, найденных в интернете или видео, без понимания процесса и этапов нейрографики может привести к ошибочным результатам. - Использование неудобных инструментов: Выбор неподходящих инструментов для рисования может затруднить процесс и снизить качество работы. - Отсутствие рефлексии: Важно анализировать свои работы и понимать, что каждый рисунок отражает ваши внутренние процессы. - Игнорирование линий поля и фигуры фиксации: Недостаточно выраженные линии поля и фигуры фиксации могут сделать рисунок незаконченным. - Рисование без темы: Нейрографика часто используется для работы с конкретной проблемой или целью, поэтому важно иметь четкую тему перед началом рисования. - Не писать 20 слов за 2 минуты: Этот этап помогает сфокусироваться на теме и задаче, которую вы хотите решить с помощью нейрографики. - Использование гелевой ручки или циркуля: Эти инструменты могут ограничить свободу движения и спонтанность, которые важны в нейрографике. - Не следовать алгоритмам нейрографики: Пропуск этапов или неправильное выполнение алгоритмов может привести к потере эффективности метода. - Отсутствие практики: Регулярная практика является ключом к освоению нейрографики и достижению глубоких результатов. - Вести нейролинию однотипную похожую на волну или прямую - Создавать петли, острые углы (рисовать зигзаги) - Оставлять острые линии, заусенцы - Закрашивать цветом отдельные участки без объединения с другими цветами (цвета должны плавно переходить от одного к другому) - Создавать много бесполезных кружков, пузырьков - Если рисуешь фигуру фиксации, то ее необходимо выделить жирно, как линию поля, чтобы она была заметна. Избегая этих ошибок и подходя к процессу рисования с пониманием и вниманием, вы сможете максимально использовать потенциал нейрографики для личностного роста и саморазвития. --- # ПРИМЕРЫ # Нейрографический алгоритм, направленный на улучшение здоровья спины - Определение намерения: Перед началом рисования четко сформулируйте свое намерение. Например, это может быть желание избавиться от боли в спине или улучшить гибкость позвоночника. - Подготовка пространства и материалов: Выберите удобное место для рисования и подготовьте необходимые материалы, такие как бумага, ручки или карандаши. - Разминка: Сделайте несколько простых упражнений для рук, чтобы расслабиться и настроиться на рисование. - Рисование основы: Начните с рисования базовых линий, которые символизируют вашу спину. Это могут быть вертикальные линии, изгибы, отражающие форму позвоночника. - Создание связей: Соедините линии, используя нейрографические связи, чтобы представить взаимосвязь между различными частями спины и тела. - Интеграция фигур: Включите в рисунок геометрические фигуры, такие как круги или волны, которые могут символизировать гибкость и движение. - Работа с цветом: Используйте цвета, которые ассоциируются у вас со здоровьем и благополучием. Зеленый цвет может символизировать исцеление, синий — спокойствие и расслабление. - Рефлексия и анализ: После завершения рисунка проведите время, размышляя о процессе и о том, что ваш рисунок может отражать о состоянии вашей спины. - Доработка рисунка: Если в процессе рефлексии вы почувствовали, что что-то нужно изменить или добавить, вернитесь к рисунку и внесите необходимые коррективы. - Повторение: Регулярно практикуйте нейрографику, чтобы поддерживать фокус на здоровье спины и укреплять связь между творчеством и благополучием. Этот алгоритм является лишь одним из возможных подходов и может быть адаптирован в соответствии с вашими личными ощущениями и потребностями. # Нейрографический алгоритм, направленный на повышение финансового дохода - Формулирование намерения: Определите четкое намерение увеличить свой доход. Напишите его на листе бумаги, где будете рисовать. - Создание базовой структуры: Начните с рисования базовых линий, которые символизируют потоки финансовых ресурсов. Это могут быть прямые линии, волны или любые другие формы, которые ассоциируются у вас с деньгами. - Скругление углов: Пройдитесь по всем острым углам и скруглите их, чтобы снять внутренние блоки и сопротивления, связанные с деньгами. - Интеграция и связывание: Соедините отдельные части рисунка, чтобы создать целостное изображение, символизирующее интеграцию ваших финансовых потоков. - Добавление символов роста: Включите в рисунок элементы, символизирующие рост и процветание, например, изображения деревьев или восходящих стрел. - Работа с цветом: Используйте зеленый цвет для символизации денег и роста, золотой или желтый — для привлечения богатства. - Визуализация цели: Представьте, что ваш доход увеличивается, и попробуйте передать это ощущение в рисунке. - Рефлексия и анализ: После завершения рисунка проведите время, размышляя о его значении и о том, как он отражает ваше отношение к деньгам и финансовым целям. - Доработка рисунка: Если в процессе рефлексии вы почувствовали, что что-то нужно изменить или добавить, вернитесь к рисунку и внесите необходимые коррективы. - Повторение и практика: Регулярно практикуйте этот алгоритм, чтобы укрепить свою фокусировку на финансовых целях и привлечь больше дохода. Этот алгоритм можно адаптировать и дополнить в соответствии с вашими личными убеждениями и целями.

Установка rpm

# Качаем ``` wget https://example.com/path/to/package.rpm OR curl -O https://example.com/path/to/package.rpm ``` # Ставим ``` // Fedora sudo dnf install ./package.rpm OR sudo rpm -i package.rpm ```

Install MongoDB on Fedora

``` sudo micro /etc/yum.repos.d/mongodb-org-6.0.repo [mongodb-org-6.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/9/mongodb-org/6.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc sudo dnf install mongodb-org mongodb-org-server sudo systemctl enable mongod.service sudo systemctl start mongod.service sudo systemctl status mongod.service mongosh если не работает, то sudo dnf remove mongodb-mongosh sudo dnf install mongodb-mongosh-shared-openssl3 mongod -version ``` # Если на UBUNTU то по инструкции https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-ubuntu/ Оф инструкция # Удалить с Ubuntu sudo service mongod stop sudo apt-get purge "mongodb-org*" sudo rm -r /var/log/mongodb sudo rm -r /var/lib/mongodb sudo apt-get purge mongodb-org* sudo rm -r /var/log/mongodb sudo apt-get purge mongodb mongodb-clients mongodb-server mongodb-dev sudo apt-get autoremove --purge mongodb sudo apt-get remove mongodb* --purge sudo apt-get purge mongodb-org* sudo rm -r /var/log/mongodb /var/lib/mongodb

Мотивация икигай

# Что любите Страсть # В чем сильны Работа # За что платят Призвание # Нужно людям Миссия # Что любите А все вместе - икигай Кайдзен - ежедневное непрерывное улучшение Помодоро - 25 минут работать не отвлекаясь, и на 5 минут перерыв Хара хачи бу - кушать на 80% для увеличения энергии Шошин - подходи всегда как новичок Ваби саби - ничего не совершенно

Задача собеседования

Там у нас было 10 мышей и 1000 пробирок. В одной из пробирок яд. Нужно проверить, в какой пробирке яд, за минимальное количество дней. Узнать результаты яда можно на следующий день, если мышки не стало. Есть решение за 1 день. Решение: ||первая пробирка: 0000000001 — даём каплю мыши в самой правой клетке вторая пробирка: 0000000010 — даём каплю мыши во второй клетке справа и так до 1111101000||

Добавить кнопку в админку битрикс

Кнопка для админки битрикс в /local/php_interface/init.php ``` AddEventHandler("main", "OnBuildGlobalMenu", "MyOnBuildGlobalMenu"); function MyOnBuildGlobalMenu(&$aGlobalMenu, &$aModuleMenu) { //unset($aGlobalMenu["global_menu_desktop"]); //echo '<pre>'.print_r([$aGlobalMenu, $aModuleMenu], true).'</pre>'; // global_menu_services $aModuleMenu[] = [ 'parent_menu' => 'global_menu_content', //'global_menu_services' //[section] => millcom_phpthumb 'sort' => 50, 'text' => 'Редактор карт', 'title' => 'Редактор карт', 'url' => '/map/editor/', 'icon' => 'sale_crm_site_master_icon', //'learning_icon_certification', ]; } ``` https://dev.1c-bitrix.ru/api_help/main/events/onbuildglobalmenu.php Документация

15 привычек богатых людей

1. Инвестирование: Богатые люди часто инвестируют свои деньги в акции, облигации, недвижимость и другие активы, чтобы сохранить и приумножить свое богатство. 2. Личный рост и самосовершенствование: Они тратят время и деньги на обучение, чтение, тренинги и семинары, чтобы повысить свои знания и навыки. 3. Планирование и целеполагание: Богатые люди тратят время на планирование своих финансовых целей и составление стратегий для их достижения. 4. Соблюдение бюджета: Они контролируют свои расходы и стараются жить в рамках своего бюджета, чтобы избежать ненужных трат. 5. Создание множества источников дохода: Богатые люди стремятся иметь несколько источников дохода, чтобы минимизировать риск и обеспечить стабильность финансов. 6. Высокая производительность: Они работают эффективно и стремятся к высокой производительности, чтобы достичь большего за меньшее время. 7. Стремление к лидерству: Богатые люди часто стремятся занимать руководящие позиции и влиять на решения, которые могут привести к большему успеху. 8. Создание сетей: Они строят прочные связи с другими успешными людьми, чтобы обмениваться идеями, ресурсами и возможностями. 9. Умение управлять рисками: Богатые люди умеют оценивать риски и принимать обоснованные решения, чтобы максимизировать свои шансы на успех. 10. Филантропия: Многие богатые люди жертвуют деньги и ресурсы на благотворительность и поддержку социальных инициатив. 11. Умение распоряжаться временем: Они умеют эффективно распределять свое время между работой, личными интересами и отдыхом. 12. Стремление к достижению: Богатые люди постоянно стремятся к новым целям и достижениям, чтобы продолжать развиваться и расти. 13. Умение работать в команде: Они понимают важность сотрудничества и умения эффективно общаться с другими членами команды. 14. Умение принимать решения: Богатые люди быстро и эффективно принимают решения, основываясь на доступной информации и своем опыте. 15. Умение справляться с неудачами: Они понимают, что неудачи являются частью процесса обучения и роста, и учатся из них, чтобы стать более успешными в будущем. + Брать ответственность Говорить нет Не бояться просесть в доходах Контакты Осознанный риск Инвестирование овершенствование Планирование контролируют расходы Создание источников дохода производительность занимать руководящие позиции связи управлять рисками благотворительность распоряжаться временем продолжать развиваться Умение работать в команде быстро и эффективно принимают решения неудачи являются частью процесса обучения и роста

docker in android

Termux pkg install root-repo && pkg install docker docker -v https://youtu.be/Z_cUS7kCAsE?si=ddXESzHteDbes8Qz

После переустановки linux

sudo apt install kde-plasma-desktop sudo apt install telegram-desktop fastfetch apt-get install --reinstall locales apt update && apt upgrade sudo apt install wireguard-tools sudo apt install plasma-nm - Настроить расположение экранов - Протестить VSync - Переключение языка - Сети (И убрать галочку автоматическое включение) - Темный режим - Убрать заставку - Открытие окна по двойному клику Настройки, поведение раб среды, Основн парам, выбрать выделяет обьект - Скриншоты На клавишу Настройки комбинации комбинации Добавить приложение Flameshot - Буфер обмена - Уход в сон отменить Настройки, управление питанием, и все галочки убрать - 3 рабочих стола Настройки, поведение раб среды, Вирт раб столы, Добавить, отключить анимац переходов Редактировать панель, переместить их в право, и высоту сделать 38 - у телеграмма убрать оконный (меню / настр / Продвин настр/ системн рамка окна (в названии окна)) - У фаерфокс выключить ускорение В настройках, в поиске [произв] и убираем 2 галочки: Использовать рекомендуемые настро По возможности использовать аппара - Установка офиса - Отключить анимацию - Настроить пуск Прав кнопкой, настроить виджет, иконка, все, и в поиске menu - Убрать переключение рабочих столов по скроллу Правой кнопкой по рабоч столу настроить рабочий стол и обои Действия мыши

arch linux

btrfs лучше ext4 Так как снимки моментальнеые Запись в rufus-4.1p.exe Выбираем DD Запись для линукса Для вайфай iwctl device list station wlan0 scan station wlan0 get-networks station wlan0 connect НазваниеСети Пароль вифи exit ping -c2 archlinux.org archinstall budgie Nvidia propri multilib // Это чтоб 32 битные шли на 64 Важно при установке добавить linux-headers linux-zen-headers это для сетевых драйверов Игровое ядро sudo pacman -S linux-zen sudo pacman -S linux-lts sudo mkinitcpio -p linux-lts // Выбор ядра по умолчанию sudo bootctl update // Для systemd-boot выбрать ядро в ручную sudo nano /boot/loader/entries/3434.conf sudo pacman -Syu // Обновить систему Установка sudo pacman -S mc htop wget bash-completion unzip zip firefox chromium fastfetch wireguard-tools telegram-desktop flameshot ktorrent discord krita net-tools ntfs-3g exfat-utils micro baobab partitionmanager dosfstools steam mangohud goverlay kate vlc nvidia-settings gwenview meld sudo pacman -Syu partitionmanager Сравнение файлов sudo pacman -Syu sudo pacman -S meld filelight timeshift sudo pacman -S flatpak flatpak install flathub com.visualstudio.code -y && flatpak install flathub com.brave.Browser -y && flatpak install flathub org.onlyoffice.desktopeditors -y && flatpak install flathub org.videolan.VLC -y && flatpak install flathub org.kde.krita -y && flatpak install flathub org.sqlitebrowser.sqlitebrowser -y && flatpak install flathub com.anydesk.Anydesk -y && flatpak install flathub org.filezillaproject.Filezilla -y Если надо ещё atom obs-studio blender hardinfo gimp libreoffice gparted bash mc transmission-cli kolourpaint inkscape gimp https://pingvinus.ru/programs/ Удаление pacman -Rs gimp Поиск sudo pacman -Ss steam Инфо об pacman -Si steam Все возможные sudo pacman -Ss sudo pacman -Ss >> list.txt Всё что поставил pacman -Q pacman -Q | grep steam ctrl esc - открывает диспетчер задач как в винде ctrl alt t - консоль Чтоб сохранялся выбор ядра по умолчанию: включить опцию loader.conf Откройте файл /boot/loader/loader.conf Найдите строку, начинающуюся с default или добавьте её, если таковой нет. Затем установите значение saved, чтобы systemd-boot использовал последнее выбранное ядро для загрузки. default saved Включите сохранение выбора ядра, добавив или раскомментировав следующую строку: timeout 3 editor 0 auto-entries 1 auto-firmware 1 console-mode max Сохраните изменения и закройте редактор. Обновите конфигурацию загрузчика, выполнив команду: bootctl update

Arch после установки / nobara

Если не запускается оболочка, то зажимаем alt жмём f2 и ждём https://nobaraproject.org/ Магазин https://flathub.org/ Установка sudo dnf install flatpak flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo Bottles - wine flatpak install flathub com.usebottles.bottles Установка прав flatpak override --user --filesystem=/home/admin/windowsapps Крорбки flatpak install flathub org.gnome.Boxes Запустить flatpak run com.visualstudio.code Установленны список flatpak list -d --app --runtime Удалить flatpak uninstall telegram flatpak uninstall org.mozilla.firefox flatpak --user uninstall com.mojang.Minecraft flatpak --system uninstall com.mojang.Minecraft sudo dnf remove xbacklight dnf install timeshift Установить sudo dnf install firefox chromium telegram flameshot timeshift htop mc nano fastfetch micro wireguard-tools vlc -y sudo dnf install mc htop wget bash-completion unzip zip firefox chromium fastfetch wireguard-tools telegram-desktop flameshot ktorrent discord krita net-tools ntfs-3g exfat-utils micro baobab partitionmanager dosfstools gwenview flatpak install flathub com.brave.Browser -y && flatpak install flathub com.visualstudio.code -y && flatpak install flathub com.notepadqq.Notepadqq -y && flatpak install flathub org.onlyoffice.desktopeditors -y && flatpak install flathub org.videolan.VLC -y && flatpak install flathub org.kde.krita -y && flatpak install flathub org.sqlitebrowser.sqlitebrowser -y && flatpak install flathub com.anydesk.Anydesk -y && flatpak install flathub org.filezillaproject.Filezilla -y Старые flatpak install flathub org.mozilla.firefox -y && // Быстрый просмотр картинок flatpak install flathub de.haeckerfelix.Fragments flatpak install flathub io.github.Figma_Linux.figma_linux flatpak install flathub com.sweethome3d.Sweethome3d flatpak install flathub com.github.bjaraujo.Bombermaaan flatpak install flathub com.obsproject.Studio flatpak install flathub uk.org.greenend.chiark.sgtatham.putty flatpak install flathub org.blender.Blender flatpak install flathub org.flameshot.Flameshot flatpak install flathub org.libretro.RetroArch flatpak install flathub org.ppsspp.PPSSPP // Вектор рисовалка flatpak install flathub org.inkscape.Inkscape // Схемы рисовалка flatpak install flathub com.jgraph.drawio.desktop // Игра с блоками Майн стрелялка flatpak install flathub jp.yvt.OpenSpades -y %Y-%m-%d %k:%M // Видеоредакторы shotcut kdenlive Горячие клавиши win p - на каком мониторе показывать win пробел - меж языками ctrl alt t - terminal ctrl alt стрелочки - рабочие столы Возня с драйверами на видюху sudo dnf remove nvidia sudo kroko-cli autoinstall // Показать все rpm -qa // Поиск по показам всех rpm -qa | grep nvidia525-core sudo dnf remove nvidia525-core.x86_64 sudo dnf search nvidia525-core sudo dnf install inxi nvidia525-core nvidia-settings -y inxi -G sudo kroko-cli get-gpus sudo kroko-cli best-driver sudo kroko-cli autoinstall

Промт для gpt для роли ментарства на язык golang

хороший пример промпта для GPT, чтобы создать контекст для роли ментарства на языке Go (Golang): ----- Ты - опытный разработчик на языке Go (Golang), специализирующийся на создании эффективных и масштабируемых приложений. Твоя задача - помогать другим разработчикам, используя свои знания и навыки в области Go. Будь готов отвечать на вопросы, касающиеся синтаксиса, паттернов проектирования, оптимизации кода, работы с базами данных, сетевым программированием и другими аспектами разработки на Go. Приветствуйте вопросы от новичков и опытных разработчиков, предлагайте решения проблем, делитесь своими знаниями и опытом. Будь внимателен к тому, чтобы ваши ответы были понятными, точными и актуальными. Используйте примеры кода, где это уместно, и не забывайте о принципах чистоты кода и хорошего тона в разработке. ----- Этот промпт создает контекст для GPT, чтобы она могла действовать как ментор по Go, предоставляя полезные и точные ответы на вопросы, связанные с языком программирования Go.

Сканирование qr на фронте

Сканирование qr на фронте https://scanapp.org/html5-qrcode-docs/docs/intro <script src="https://unpkg.com/html5-qrcode" type="text/javascript"> function onScanSuccess(decodedText, decodedResult) { // handle the scanned code as you like, for example: console.log(`Code matched = ${decodedText}`, decodedResult); } function onScanFailure(error) { // handle scan failure, usually better to ignore and keep scanning. // for example: console.warn(`Code scan error = ${error}`); } let html5QrcodeScanner = new Html5QrcodeScanner( "reader", { fps: 10, qrbox: {width: 250, height: 250} }, /* verbose= */ false); html5QrcodeScanner.render(onScanSuccess, onScanFailure); // This method will trigger user permissions Html5Qrcode.getCameras().then(devices => { /** * devices would be an array of objects of type: * { id: "id", label: "label" } */ if (devices && devices.length) { var cameraId = devices[0].id; // .. use this to start scanning. } }).catch(err => { // handle err }); const html5QrCode = new Html5Qrcode(/* element id */ "reader"); html5QrCode.start( cameraId, { fps: 10, // Optional, frame per seconds for qr code scanning qrbox: { width: 250, height: 250 } // Optional, if you want bounded box UI }, (decodedText, decodedResult) => { // do something when code is read }, (errorMessage) => { // parse error, ignore it. }) .catch((err) => { // Start failed, handle it. }); const html5QrCode = new Html5Qrcode("reader", /* verbose= */ true); const html5QrCode = new Html5Qrcode("reader"); const qrCodeSuccessCallback = (decodedText, decodedResult) => { /* handle success */ }; const config = { fps: 10, qrbox: { width: 250, height: 250 } }; // If you want to prefer front camera html5QrCode.start({ facingMode: "user" }, config, qrCodeSuccessCallback); // If you want to prefer back camera html5QrCode.start({ facingMode: "environment" }, config, qrCodeSuccessCallback); // Select front camera or fail with `OverconstrainedError`. html5QrCode.start({ facingMode: { exact: "user"} }, config, qrCodeSuccessCallback); // Select back camera or fail with `OverconstrainedError`. html5QrCode.start({ facingMode: { exact: "environment"} }, config, qrCodeSuccessCallback);

Сборник Самый умный

https://chatbot.theb.ai/ // авторизация gpt theb.ai , lama https://openchat.team/ru // подобие gpt4 https://www.llama2.ai/ // 70B https://chatru.net/ru // gpt3.5 https://chat.deepseek.com/ // Китайский https://chat.lmsys.org/ // разные gpt https://www.perplexity.ai/ // Подобие гугл поиска https://you.com/ // gpt4, авторизация через гугл https://ya.ru/alisa_davay_pridumaem // яндекс https://www.blackbox.ai/ // Для кода https://www.midjourney.com/ // Картинки // Сторонние https://www.deepl.com/translator#en/ru // переводчик // Часто посылают https://chat.geekgpt.org/ // gpt3.5 https://chat.gpt.bz/ // gpt4 // Требуется впн https://www.bing.com/chat // gpt 4 от bing https://chat.openai.com/ // gpt 3.5 Топ: theb.ai, you, Llama и яндекс

Проценты при загрузке файла на сервер

<?php // https://learn.javascript.ru/formdata if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (!empty($_FILES) && $_FILES['message_file']['error'] === 0) { $filename = $_FILES['message_file']['name']; $baseUrl = './'; $fileLink = $baseUrl . $filename; if (move_uploaded_file($_FILES['message_file']['tmp_name'], $filename)) { $res = ['answer' => 'ok', 'file' => "<img src='{$filename}' alt=''>", 'path' => "<a href='{$baseUrl}{$filename}'>{$fileLink}</a>"]; } } else { $res = ['answer' => 'error', 'file' => "File is required"]; } echo json_encode($res); // ответ exit(); // чтобы сама форма не передавалась в ответ } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } .container { max-width: 800px; margin: 0 auto; padding: 60px; } .load-file { width: 300px; display: flex; justify-content: space-between; align-items: end; margin-bottom: 36px; } #send { padding: 8px; border: 1px solid teal; border-radius: 5px; cursor: pointer; transition: all 0.3s; } #send:hover { background-color: #008080; color: #fff; } progress { width: 150px; height: 5px; border: 1px solid #008080; border-radius: 5px; } progress::-webkit-progress-bar { background-color: #fff; border-radius: 5px; } progress::-webkit-progress-value { background-color: #008080; border-radius: 5px; } progress::-moz-progress-bar { width: 150px; height: 5px; border: 1px solid #008080; border-radius: 5px; } #statusText { font-size: 12px; } .loaded-files__title { margin-bottom: 15px; } .loaded-files p { margin-bottom: 15px; } </style> </head> <body> <div class="container"> <form id="form" method="post" enctype="multipart/form-data"> <div class="load-file"> <input type="file" id="message_file" name="message_file" style="display: none" onchange="uploadFile()"> <button type="button" id="send" onclick="document.getElementById('message_file').click()">Загрузить файл</button> <div class="load-progress"> <p id="statusText"></p> <progress id="progressBar" value="0" max="100"></progress> </div> </div> </form> <div class="loaded-files" id="res"> <h3 class="loaded-files__title">Загруженные файлы</h3> </div> </div> <script> function uploadFile() { const fileInput = document.getElementById('message_file'); const progressBar = document.getElementById('progressBar'); const statusText = document.getElementById('statusText'); const btn = document.getElementById('send'); const file = fileInput.files[0]; const formData = new FormData(); formData.append('message_file', file); const xhr = new XMLHttpRequest(); xhr.open('POST', './upload.php'); xhr.upload.onprogress = function(event) { btn.textContent = 'Идет загрузка...'; btn.disabled = true; const percentLoaded = Math.round((event.loaded / event.total) * 100); progressBar.value = percentLoaded; statusText.textContent = `Загружено ${percentLoaded}%`; }; xhr.onloadend = function() { if (xhr.status === 200) { btn.textContent = 'Загрузить файл'; btn.disabled = false; const response = JSON.parse(xhr.response); statusText.textContent = 'Загружено 100%'; document.getElementById('res').insertAdjacentHTML('beforeend', `<p>${response.path}</p>`); } else { statusText.textContent = 'Ошибка при загрузке'; } }; xhr.onerror = function() { statusText.textContent = 'Ошибка соединения'; }; xhr.send(formData); } </script> </body> </html>

xml files to json

import json import os import xml.etree.ElementTree as ET def translit(text): # Словарь для транслитерации букв translit_dict = { 'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'e', 'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'y', 'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', 'ф': 'f', 'х': 'kh', 'ц': 'ts', 'ч': 'ch', 'ш': 'sh', 'щ': 'shch', 'ъ': '', 'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu', 'я': 'ya', 'А': 'A', 'Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ё': 'E', 'Ж': 'Zh', 'З': 'Z', 'И': 'I', 'Й': 'Y', 'К': 'K', 'Л': 'L', 'М': 'M', 'Н': 'N', 'О': 'O', 'П': 'P', 'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U', 'Ф': 'F', 'Х': 'Kh', 'Ц': 'Ts', 'Ч': 'Ch', 'Ш': 'Sh', 'Щ': 'Shch', 'Ъ': '', 'Ы': 'Y', 'Ь': '', 'Э': 'E', 'Ю': 'Yu', 'Я': 'Ya', ' ': ' ' # пробел оставляем без изменений } result = '' for char in text: result += translit_dict.get(char, char) return result def xml_to_dict(element): result = {} for child in element: if len(child) > 0: value = xml_to_dict(child) else: value = child.text key = child.tag if '}' in key: key = key.split('}', 1)[1] key = translit(key) if key in result: if not isinstance(result[key], list): result[key] = [result[key]] result[key].append(value) else: result[key] = value return result xml_folder = 'D:/Загрузки/logs/' json_folder = 'D:/Загрузки/logsJson/' os.makedirs(json_folder, exist_ok=True) for filename in os.listdir(xml_folder): if filename.endswith(".xml"): xml_file_path = os.path.join(xml_folder, filename) with open(xml_file_path, 'r', encoding='utf-8') as f: xml_data = f.read() root = ET.fromstring(xml_data) dict_data = xml_to_dict(root) json_data = json.dumps(dict_data, ensure_ascii=False, indent=4) # Создаем JSON файл с таким же именем в папке logsJson json_file_path = os.path.join(json_folder, os.path.splitext(filename)[0] + '.json') with open(json_file_path, 'w', encoding='utf-8') as f: f.write(json_data) print(f'Создан JSON файл: {json_file_path}')

Какие необходимо сделать проекты, чтоб набраться опыта по golang?

Гугли golang developer roadmap golang rest api можно локально создать и через ngrok публиковать Для набора опыта по Golang рекомендуется выполнить следующие проекты: 1. Создание веб-приложения: Разработайте простое приложение, используя фреймворк Golang, такой как Gin или Echo. Этот проект поможет вам понять основы маршрутизации HTTP, обработки запросов и создания REST API. 2. Система обработки очередей: Разработайте систему обработки очередей с использованием пакета RabbitMQ или Apache Kafka. Это позволит вам понять асинхронную обработку сообщений и распределение задач между различными воркерами. 3. Веб-скрапер: Разработайте программу, которая будет извлекать данные с веб-страниц и сохранять их в базу данных. Используйте пакеты goquery для извлечения данных и GORM для работы с базой данных. 4. Разработка CLI-инструмента: Создайте командную строку (CLI) инструмент, который будет выполнять операции взаимодействия с файловой системой или сетью. Вы можете использовать пакет cobra для создания интерфейса командной строки. 5. Микросервисная архитектура: Разработайте небольшое приложение, состоящее из нескольких микросервисов, которые взаимодействуют друг с другом с использованием протокола gRPC или REST API. Это позволит вам ознакомиться с архитектурой микросервисов и понять, как разделить функциональность приложения на отдельные компоненты. Эти проекты помогут вам применить и углубить ваши знания по Golang и познакомиться с некоторыми распространенными библиотеками и пакетами.

Популярные вопросы по golang

Горутины это как легковесные потоки каналы - механизм обмена данными меж горутинами 1. Что такое Golang и зачем его использовать? Golang, также известный как Go, является открытым исходным кодом языком программирования, разработанным в Google. Он создан для упрощения создания эффективных, надежных и масштабируемых приложений. Golang может быть использован для написания серверных приложений, веб-приложений, микросервисов, мобильных приложений и программного обеспечения для IoT и многого другого. 2. Как установить Golang на компьютер? Golang может быть установлен с официального сайта go-lang.org. После загрузки установочного файла необходимо запустить его и следовать инструкциям по установке. Также есть другие способы установки Golang, например, через менеджеры пакетов или докер. 3. Как создать первую программу на Golang? Для создания первой программы на Golang необходимо открыть текстовый редактор или интегрированную среду разработки (IDE) и написать следующий код: package main import "fmt" func main() { fmt.Println("Hello, World!") } После этого необходимо сохранить файл с расширением .go и скомпилировать программу с помощью команды go build. 4. Как использовать пакеты в Golang? Для использования пакетов в Golang необходимо импортировать их в свой код с помощью команды import. Например, для использования пакета fmt необходимо написать import "fmt". После этого можно использовать функции и переменные из пакета fmt. 5. Какие типы данных поддерживает Golang? Golang поддерживает множество типов данных, включая целочисленные типы (int, uint), вещественные типы (float32, float64), логический тип (bool), строковый тип (string) и другие. Также в Golang есть композитные типы, такие как массивы, слайсы, карты и структуры. 6. Как работать с файлами в Golang? Для работы с файлами в Golang используется пакет os. Например, чтобы открыть файл для чтения, можно использовать функцию os.Open: file, err := os.Open("file.txt") if err != nil { // обработка ошибки } Затем можно читать данные из файла с помощью функции Read: data := make([]byte, 1024) _, err := file.Read(data) if err != nil { // обработка ошибки } 7. Как выполнять многопоточную обработку данных в Golang? В Golang для многопоточной обработки данных используется горутины (goroutines) и каналы (channels). Горутины позволяют выполнять асинхронные задачи, а каналы - передавать данные между горутинами. Например, можно использовать горутины для чтения данных из нескольких файлов и передачи их в общий канал: func readFile(filename string, out chan<- []byte) { file, err := os.Open(filename) if err != nil { // обработка ошибки } defer file.Close() data := make([]byte, 1024) for { n, err := file.Read(data) if err == io.EOF { break } if err != nil { // обработка ошибки } out <- data[:n] } close(out) } out := make(chan []byte) go readFile("file1.txt", out) go readFile("file2.txt", out) for data := range out { // обработка данных } 8. Как тестировать код на Golang? Для тестирования кода на Golang используется пакет testing. Тестовые функции должны начинаться с префикса Test, принимать на вход объект типа *testing.T и возвращать void. В тестовых функциях можно вызывать функции своего кода и проверять их результаты с помощью функиций проверки, таких как assert.Equal: import "testing" func TestAdd(t *testing.T) { result := add(2, 3) if result != 5 { t.Errorf("expected 5, but got %d", result) } }

Шпоры на основные вопросы собеседований

спрашивают про ООП, парадигмы, принципы ООП паттерны ----- Порождающие паттерны - создают объекты, или позволяют получить доступ к существующим. ----- Singleton (одиночка) Multiton (пул «одиночек») - это множество одиночек, каждый из которых имеет имя, по которому к нему можно получить доступ. Object pool (пул объектов) - как предыдущий, но не все они обязаны быть одиночками. Factory (фабрика) - клонирование эталонного объекта. Builder (строитель) - строитель содержит в себе весь набор действий, необходимый для производства. Prototype (прототип) - создает наполнение для существующей сущности. Factory method (фабричный метод) - интерфейс для формирования объектов. Lazy initialization (отложенная инициализация) - действие не при создании, а по требованию Dependency injection (внедрение зависимости) - позволяет взаимозаменять отдельные части программы без потери общей функциональности. ----- Структурирующие паттерны - определяют структуры, которые вносят изменения в интерфейс созданных объектов или его реализацию. ----- Adapter, wrapper (адаптер, обертка) - интерфейс для организации применения функций объекта. Bridge (мост) - разделяет абстракцию и реализацию таким образом, чтобы они могли меняться независимо. Composite (компоновщик) - объединение объектов в древовидную структуру, позволяя обращаться к ним одинаковым образом. Decorator (декоратор, оформитель) - расширение исходного объекта до требуемого вида. Facade (фасад) - возможные вызовы сводятся к одному объекту, который передаёт вызовы соответствующим объектам системы. Front controller (единая точка входа) - используете один интерфейс (броузер) для получения доступа к разным объектам большой системы (сайтам в интернете) Flyweight (приспособленец) - объект представляет себя как уникальный экземпляр в разных частях программыю Proxy или surrogate (прокси, заместитель, суррогат) - объект, контролирующий доступ к другому объекту, перехватывая все вызовы. ----- Поведенческие (behavioral) - выявляют общие закономерности связей между объектами, которые реализуют данные шаблоны. ----- Command или action (команда, действие) - определяет общие правила для объектов для выполнения команды, а что именно будет выполнено определяет сам объект. Interpreter (интерпретатор) - решает одну постоянно меняющуюся задачу. Iterator (итератор, указатель) - интерфейс даёт доступ к элементам коллекции и навигацию по ним. Mediator (посредник) - обеспечает взаимодействие нескольких объектов. Memento (хранитель) - сохранение внутреннего состояния объекта без нарушения инкапсуляции. Observer или Listener (наблюдатель, слушатель) - даёт возможность экземпляру объекта этого класса получать уведомления от остальных объектов. State (состояние) - когда объект должен изменять свое поведение, в зависимости от того, в каком состоянии он находится Strategy (стратегия) - определение семейства алгоритмов и инкапсуляции каждого из них. Template method (Шаблонный метод) - даёт наследникам возможность переопределять те или иные шаги алгоритма, оставляя его общую структуру нетронутой. 1. Docker отличие от docker-compose Docker применяется для управления отдельными контейнерами (сервисами), из которых состоит приложение. docker-compose - используется для одновременного управления несколькими контейнерами, входящими в состав приложения. 2. Основные парадигмы ООП Инкапсуляция - сокрытие реализации программных частей объекта; упаковка данных и функций в единый комплект. Наследование - создание нового объекта/класса на основании старого. Полиморфизм - возможность переопределять методы, перегружать их в зависимости от данных. Абстракция - придание объекту общих характеристик, концептуально важных черт. 3. Интерфейс в ООП - регламент описывающий взаимодействия (класс, объект). Класс который реализует интерфейс обязан реализовывать все его методы. 4. Транзакция sql - последовательность операторов SQL, которые выполняются как объединенные в единицу работы. 5. MVC - Модель (Model) - предоставляет данные и реагирует на команды контроллера. - Представление (View) - отвечает за отображение данных модели пользователю. - Контроллер (Controller) - интерпретирует действия пользователя, оповещая модель о необходимости изменений. 6. Принципы SOLID S - единственная ответственность. У класса должна быть только одна причина для изменения. O - открытость/закрытость. Программные сущности должны быть открыты для расширения, но закрыты для модификации. L - подстановки Лисков. Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа не зная об этом. I - разделения интерфейса. много интерфейсов, лучше, чем один интерфейс общего назначения. D - инверсии зависимостей. Зависимость на Абстракциях. Нет зависимости на что-то конкретное. 7. KISS - Keep it simple, stupid. работают лучше всего, если они остаются простыми DRY - Don't repeat yourself. Не повторяйся GIT Настройка git config --global user.name "Your Name" # указать имя, которым будут подписаны коммиты git config --global user.email "e@w.com" # указать электропочту, которая будет в описании коммитера - git add - добавляет содержимое рабочей директории в индекс для последующего коммита. - git commit - использует лишь этот индекс, так что вы можете использовать git add для сборки слепка вашего следующего коммита. - git status - показывает состояния файлов в рабочей директории и индексе: какие файлы изменены, но не добавлены в индекс; какие ожидают коммита в индексе. - git diff - используется для вычисления разницы между любыми двумя Git деревьями. - git diff --staged - разница между индексом и последним коммитом - git diff master branchB - между любыми двумя коммитами - git commit - берёт все данные, добавленные в индекс с помощью git add, и сохраняет их слепок во внутренней базе данных, а затем сдвигает указатель текущей ветки на этот слепок. - git reset - используется в основном для отмены изменений - git rm - для удаления файлов из индекса и рабочей директории. - git mv - переместить файл - git clean - для удаления мусора из рабочей директории. Это могут быть результаты сборки проекта или файлы конфликтов слияний. - git branch - перечислять ваши ветки, создавать новые, удалять и переименовывать их - git checkout - переключения веток и выгрузки их содержимого в рабочую директорию - git merge - для слияния одной или нескольких веток в текущую. - git log - для просмотра истории коммитов, начиная с самого свежего и уходя к истокам проекта - git stash - для временного сохранения всех незакоммиченных изменений для очистки рабочей директории без необходимости коммитить незавершённую работу в новую ветку. - git tag - для задания постоянной метки на какой-либо момент в истории проекта - git fetch - связывается с удалённым репозиторием и забирает из него все изменения, которых у вас пока нет и сохраняет их локально - git pull - вначале забирает изменения из указанного удалённого репозитория, а затем пытается слить их с текущей веткой. - git push - для установления связи с удалённым репозиторием, вычисления локальных изменений отсутствующих в нём, и собственно их передачи в вышеупомянутый репозиторий - git remote - управления списком удалённых репозиториев - git archive - упаковки в архив указанных коммитов или всего репозитория. - git submodule - управления вложенными репозиториями - git show - отображает объект в простом и человекопонятном виде - git shortlog - для подведения итогов команды git log

Rust установка install

wget https://sh.rustup.rs -O rustup-init.sh chmod +x rustup-init.sh ./rustup-init.sh 1 source $HOME/.cargo/env rustup install stable rustc --version nano rust_hello.rs fn main() { println!("hi"); } rustc rust_hello.rs ./rust_hello Если жалобы на cc То sudo apt install build-essential ИЛИ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh Для termux android pkg update pkg install rust rustc --version Создаём проект cargo new app_rust cd app_rust/ cargo run cargo build cargo build --release ./target/release/app_rust

Форматируем диск linux bash

https://www.youtube.com/watch?v=6L7NP4K1O5Q какие диски есть lsblk для форматирования sudo wipefs --all /dev/Выбранный_диск sudo wipefs --all /dev/sdb По вкусу заполняем нулями (долго) sudo dd if=/dev/zero of=/dev/sdb sudo dd if=/dev/zero of=/dev/sdb status=progress или подробнее ( sudo pacman -S pv ) sudo dd if=/dev/zero | pv | sudo dd of=/dev/sdb Создать раздел sudo cfdisk /dev/Выбранный_диск sudo cfdisk /dev/sdb gpt всё запись yes lsblk sudo mkfs.ext4 /dev/Выбранный_диск_из_раздела sudo mkfs.ext4 /dev/sdb1 (Норм только для линукса) или sudo mkfs.exfat /dev/sdb1 (быстрый, но опасный) или sudo mkfs.ntfs /dev/sdb1 (безопасный, но медленный) (sudo apt-get install ntfs-3g) XFS (Для линукса скорости и безопасности - норм) Файловые системы дать название (ext4) sudo e2label /dev/sdb1 "NAME1" sudo exfatlabel /dev/sdb1 "NEW_LABEL" (sudo apt-get install exfat-utils) sudo mkdir -p /disks/d Всё можно прогой partitionmanager Перед этим размонтируй диск Инфа о диске smartctl https://wiki.archlinux.org/title/S.M.A.R.T._(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) smartctl -c /dev/sda Тесты smartctl -H /dev/sda Здоровье smartctl -a /dev/sda Инфа

Эйлер задача 1 Проект Эйлера Задачи Golang and Rust

https://euler.jakumo.org/problems.html https://gobyexample.com.ru/ https://tourofrust.com/00_ru.html ----- package main import "fmt" func main() { sum := 0 for i := 1; i < 1000; i++ { if i%3 == 0 || i%5 == 0 { sum += i } } fmt.Println(sum) } ----- fn main() { let mut sum:u32 = 0; for i in 0..1000 { if i % 3 == 0 || i % 5 == 0 { sum = sum + i; } } println!("{}", sum); } ------------- Решение без цикла на js: n3 = Math.floor(1000/3); an3 = 3+3*(n3-1); // Math.floor(1000/3)*3 n5 = Math.floor(1000/5); an5 = 5+5*(n5-1); n15 = Math.floor(1000/15); an15 = 15+15*(n15-1); S=(3+an3)/2*n3+(5+an5)/2*n5-(15+an15)/2*n15; console.log(S); (3+Math.floor(1000/3)*3)/2*Math.floor(1000/3) 166833 (3+999)/2*333 166833 Это сумма чисел, которая делится на 3 без остатка Гуглить Арифметическая прогрессия Сумма арифметической прогрессии 2 5 8 11 14 .. A(n)=A(n-1)+d A(1)=A(1) A(2)=A(1)+d A(3)=A(2)+d = A(1)+d+d =A(1)+2d A(4)=A(1)+d = A(1)+3d => A(n) = A(1)+(n-1)d https://www.youtube.com/watch?v=iCQL469ZzM0

Эйлер задача 3

Задача 3 Наибольший простой делитель Простые делители числа 13195 - это 5, 7, 13 и 29. Каков самый большой делитель числа 600851475143, являющийся простым числом? Решение golang go run eiler3.go 6857 package main import "fmt" func main() { n := 600851475143 //n = 13195 simple := true for i, tmp := 2, 0; i < n; i++ { if n%i != 0 { continue } tmp = n / i simple = true for j := 2; j < tmp; j++ { if tmp%j == 0 { simple = false break } } if !simple { continue } fmt.Println(tmp) break } } А вот нормальное решение на питоне num=600851475143 count=1 while num!=1: count+=1 While num%count==0:#если число делится, то делим num/=count print(count) Давайте разберем решение на Python шаг за шагом: 1. Задача состоит в нахождении наибольшего простого делителя числа 600851475143. 2. В коде Python переменная num инициализируется значением 600851475143, которое мы хотим разложить на простые множители. 3. Переменная count инициализируется значением 1. Она будет использоваться для проверки каждого числа на то, является ли оно делителем num. 4. Цикл while продолжается до тех пор, пока num не станет равным 1. Это означает, что мы разделили num на все его простые множители. 5. Внутри цикла while значение count увеличивается на 1 на каждой итерации. Это последовательно проверяет каждое число начиная с 2 (так как 1 не считается простым числом). 6. Условие if num % count == 0: проверяет, делится ли num на count без остатка. Если это так, значит count является делителем num. 7. Если count является делителем num, то num делится на count (операция num /= count), и мы продолжаем цикл уже с новым значением num. Это уменьшает num и убирает из него найденный простой множитель. 8. Поскольку мы начинаем с count = 2 и увеличиваем count на 1 на каждом шаге, мы всегда находим наименьший простой множитель на каждом этапе. Это означает, что когда num станет равным 1, последнее значение count будет наибольшим простым множителем исходного числа. 9. Когда num становится равным 1, цикл завершается, и print(count) выводит наибольший простой множитель. Преимущество этого метода в том, что он не требует проверки каждого числа на простоту, что значительно ускоряет процесс. Мы просто делим num на наименьшие простые числа, пока не получим 1, и последнее использованное значение count будет наибольшим простым множителем. package main import "fmt" func main() { n := 600851475143 i := 1 //n = 13195 n = 10967 for n != 1 { i++ if n%i == 0 { n /= i } } fmt.Println(i) }

Что перспективнее учить в 2024 Rust или Golang?

Выбор между Rust и Go зависит от ваших целей и предпочтений. Вот краткое сравнение этих языков: Rust: - Предназначен для безопасной и одновременно высокопроизводительной работы. - Имеет сложную систему типов и владения, которая помогает предотвратить многие виды ошибок во время компиляции. - Хорошо подходит для системного программирования, включая создание операционных систем, игровых движков и высокопроизводительных серверных приложений. - Имеет более крутую кривую обучения из-за сложности управления памятью и системы владения. Go (Golang): - Разработан для простоты и быстроты разработки. - Имеет автоматическую сборку мусора, что упрощает управление памятью. - Хорошо подходит для создания микросервисов, веб-сервисов и для работы в среде облачных вычислений. - Имеет более пологую кривую обучения и часто рекомендуется как первый язык для изучения системного программирования. Если вам нужна высокая производительность и безопасность памяти, Rust может быть лучшим выбором. Если вам важна скорость разработки и простота, то Go может оказаться предпочтительнее. Оба языка активно развиваются и имеют свои сообщества, поэтому выбор также может зависеть от конкретных проектов, в которых вы планируете участвовать. Какой язык более оплачиваемый? К сожалению, прямого ответа на вопрос о сравнении зарплат между Rust и Go нет. Однако, общепринятая тенденция заключается в том, что зарплаты в IT сильно зависят от множества факторов, включая уровень опыта разработчика, тип и масштаб проекта, географическое положение и спрос на конкретные навыки на рынке труда. Чтобы получить более точную информацию о зарплатах, вы можете посетить сайты с вакансиями и посмотреть средние зарплаты для разработчиков Rust и Go в вашем регионе или в целом по индустрии. Также полезно обратить внимание на тренды и прогнозы для каждого языка, так как спрос на определенные технологии может меняться со временем и влиять на уровень зарплат.

Моё мнение по поводу искуственного интелекта и заменит ли он программистов?

Скоро за нейронкой будем исправлять коды.. По мне - это ещё один инструмент для программиста.. Всё равно останется прослойка меж тем что хочет, но не может нормально сказать ЗАКАЗЧИК, и тем как правильно написать это в нейронку, чтоб она выполнила то, что нужно..

Словарь программиста для собеседования

Те слова, которые часто спрашивают на собеседованиях.. Так то ими ты можешь пользоваться, просто не знать, как это называется.. Замыкание - когда в функции используем переменную, которая обьявленна снаружи этой функции Функция высшего порядка — в программировании функция, принимающая в качестве аргументов другие функции или возвращающая другую функцию в качестве результата. Domain Driven Design (DDD) подход к разработке приложений, основанный на выделении доменов (domain). набор принципов и схем, направленных на создание оптимальных систем объектов. Сводится к созданию программных абстракций, которые называются моделями предметных областей. В эти модели входит бизнес-логика, устанавливающая связь между реальными условиями области применения продукта и кодом. SOLID Single responsibility — принцип единственной ответственности Open-closed — принцип открытости / закрытости Liskov substitution — принцип подстановки Барбары Лисков Interface segregation — принцип разделения интерфейса Dependency inversion — принцип инверсии зависимостей Принцип единственной обязанности / ответственности (single responsibility principle / SRP) обозначает, что каждый объект должен иметь одну обязанность и эта обязанность должна быть полностью инкапсулирована в класс. Все его сервисы должны быть направлены исключительно на обеспечение этой обязанности. Принцип открытости / закрытости (open-closed principle / OCP) декларирует, что программные сущности (классы, модули, функции и т. п.) должны быть открыты для расширения, но закрыты для изменения. Это означает, что эти сущности могут менять свое поведение без изменения их исходного кода. Принцип подстановки Барбары Лисков (Liskov substitution principle / LSP) в формулировке Роберта Мартина: «функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа не зная об этом». Принцип разделения интерфейса (interface segregation principle / ISP) в формулировке Роберта Мартина: «клиенты не должны зависеть от методов, которые они не используют». Принцип разделения интерфейсов говорит о том, что слишком «толстые» интерфейсы необходимо разделять на более маленькие и специфические, чтобы клиенты маленьких интерфейсов знали только о методах, которые необходимы им в работе. В итоге, при изменении метода интерфейса не должны меняться клиенты, которые этот метод не используют. Принцип инверсии зависимостей (dependency inversion principle / DIP) — модули верхних уровней не должны зависеть от модулей нижних уровней, а оба типа модулей должны зависеть от абстракций; сами абстракции не должны зависеть от деталей, а вот детали должны зависеть от абстракций. MVC Модель — этот компонент отвечает за данные, а также определяет структуру приложения. Например, если вы создаете To-Do приложение, код компонента model будет определять список задач и отдельные задачи. Представление — этот компонент отвечает за взаимодействие с пользователем. То есть код компонента view определяет внешний вид приложения и способы его использования. Контроллер — этот компонент отвечает за связь между model и view. Код компонента controller определяет, как сайт реагирует на действия пользователя. По сути, это мозг MVC-приложения. Функция - Фрагмент программного кода (подпрограмма), к которому можно обратиться из другого места программы. Функция может принимать параметры и должна возвращать некоторое значение, возможно void. Метод - Это функция или процедура, принадлежащая какому-то классу или объекту. Процедуры - Те же функции, которые ничего не возвращают (void). Полиморфизм - Способность функции обрабатывать данные разных типов. Пример: можешь передать функции как число, как строку, так массив и она всё это нормально обработает.. Инкапсуляция (в js замыкания) - Размещение в одном компоненте данных и методов, которые с ними работают. Для других компонентов ограничение доступа к ненужным функциям/методам/переменным. Типы языков программирования: Императивные Декларативные Смешанные. Императивные (C, C++, Java) Это описание того, как ты делаешь что-то. Пример: Официант, возьми в руку листок и ручку, запиши на листке ручкой слово "бургер", повернись к кухне, иди до кухни, пока не будешь на расстоянии от неё на вытянутую руку, возьми там бургер, развернись в мою сторону, иди вперёд пока не будешь на расстоянии вытянутой руки от меня, отдай мне бургер.. Декларативные (SQL, HTML) Описание того, что ты делаешь. Пример: Официант, принеси мне бургер. Смешанные (могут быть таковыми) JavaScript, C#, Python. Динамическое программирование способ решения сложных задач путём разбиения их на более простые подзадачи. Часто многие из этих подзадач одинаковы. Подход динамического программирования состоит в том, чтобы решить каждую подзадачу только один раз, сократив тем самым количество вычислений. Это особенно полезно в случаях, когда число повторяющихся подзадач экспоненциально велико.

Rust examples

https://www.youtube.com/watch?v=vKE0OQeAxhI&list=PLgG7lPwNdp556iIin-9eaJLlu7HL6YFv0&index=6 https://doc.rust-lang.org/book/ https://dhghomon.github.io/easy_rust/Chapter_1.html https://tourofrust.com/00_ru.html Подобие, как в golang https://gobyexample.com/ https://gobyexample.com.ru/ // На всё snake_case fn main() { println!("hi"); } fn main() { let mut name = String::from("Text"); let count:i8 = 255; let count2:u8 = 127; println!("hi {}", name); } let a = 13u8; let b = 7u32; let c = a as u32 + b; println!("{}", c); const PI: f32 = 3.14159; // SCREAMING_SNAKE_CASE let nums: [i32; 3] = [1, 2, 3]; println!("{:?}", nums); println!("{}", nums[1]); fn add(x: i32, y: i32) -> i32 { return x + y; } Несколько значений из функций (как кортеж) fn swap(x: i32, y: i32) -> (i32, i32) { return (y, x); } fn main() { // return a tuple of return values let result = swap(123, 321); println!("{} {}", result.0, result.1); // destructure the tuple into two variables names let (a, b) = swap(result.0, result.1); println!("{} {}", a, b); } fn main() { for x in 0..-5 { println!("{}", x); } for x in 0..=5 { println!("{}", x); } for x in (-5..=0).rev() { println!("{}", x); } }

js продление прямой до границ прямоугольника

// ТЗ { // Напишите функцию на JavaScript, которая принимает на вход координаты начальной и конечной точек отрезка, //который находится в прямоугольнике, на плоскости. Функция должна продлить этот отрезок до границ прямоугольника //(превратить в двунаправленный луч) и вернуть координаты 2х точек, в которых лучи отрезка пересекают границу //прямоугольника. Если пересекает в углу, то всё равно должно вернуть только 2х точек. } // Теоретическое решение { //Уравнение прямой, проходящей через две точки: (y — y1)/(y2 — y1) = (x — x1)/(x2 — x1), где (x1, y1) и (x2, y2) – координаты заданных точек. //Если точка лежит на прямой, её координаты при подстановке в это уравнение будут давать верное равенство //Если 2 прямые пересекаются, то точка их пересечения будет решением системы уравнений этих прямых //...\.|.................................... //....\|R2.................................. //.....|\................................... //.....|.\.................................. //....A|__\R1_________B..................... //.....|...\..........|..................... //.....|....\.........|..................... //.....|.....\R.......|..................... //.....|......\.......|..................... //.....|.......\Q.....|..................... //.....|........\.....|..................... //....D|_________\____|C.................... //..............Q1\...|..................... //.................\..|..................... //..................\.|..................... //...................\|Q2................... //....................|\.................... // На рисунке пример условия. Точки R1 и Q1 необходимо найти, а точки R2 и Q2 необходимо будет исключить из ответа // т.к. они также являются пересечением двунаправленого луча с прямыми, содержащими стороны, но не внутри прямоугольника // Если пересечение будет в углу, то R1 и R2, и/или Q1 и Q2 будут совпадать //Итого, суть задачи: найти пересечение прямой, содержащей отрезок, со всеми сторонами прямоугольника, //из полученых 4х точек убрать повторы (если есть), и убрать точки, у которых координаты находятся снаружи прямоугольника } // Практическая часть { //Зададим начальные данные: function rInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } // Прямоугольник ABCD задаетс точками A и C. p - point function setABCD(){ let pA = { x:0, //rInt(0,500), y:0 //rInt(0,500) } let pC = { x:500,//rInt(pA.x + 1,500), y:500,//rInt(pA.y + 1,500) } //Достроим прямоугольник let pB = { x:pC.x, y:pA.y } let pD = { x:pA.x, y:pC.y } let abcd = { a:pA, b:pB, c:pC, d:pD } console.log(abcd); return abcd; } // Отрезок PQ задается точками R и Q function setRQ(abcd){ let pR = { x:rInt(abcd.a.x,abcd.c.x), y:rInt(abcd.a.y,abcd.c.y) } let pQ = { x:rInt(abcd.a.x,abcd.c.x), y:rInt(abcd.a.y,abcd.c.y) } let rq = { r:pR, q:pQ } console.log(rq); return rq; } //Получить из 2х точек уравнение прямой в виде y = kx + b // k - подобие наклона // b - смещение function getLine(p1, p2){ let res = {} if(p1.x === p2.x){ res.isVertical = true; // обработка случая с вертикальной прямой res.x = p1.x; console.log('x=',res.x); }else{ res.k = (p2.y - p1.y) / (p2.x - p1.x); // делить на 0 нельзя! Тут рассчёт наклона res.b = - (p2.y - p1.y) / (p2.x - p1.x) * p1.x + p1.y; console.log('y=',res.k,'*x+',res.b); } return res; } //Решить систему уравнение вида // y = k1*x + b1; // y = k2*x + b2 // Он ищет все точки пересечения, если бы все были лучами function solveSystem(l1, l2){ console.log(l1,l2); let res = { x:0, y:0 } if(l1.isVertical && !l2.isVertical){ console.log('Вертикальная прямая', l1); res.x = l1.x; res.y = l2.k * res.x + l2.b; }else if(l2.isVertical && !l1.isVertical){ console.log('Вертикальная прямая', l2); res.x = l2.x; res.y = l1.k * res.x + l1.b; } // l2.k - l1.k === 0 Это наклон, когда он одинаковый else if(l2.k - l1.k === 0 || l1.isVertical && l2.isVertical){ // прямые параллельны res.x = undefined; res.y = undefined; }else{ res.x = (l2.b - l1.b) / (l1.k - l2.k); res.y = l1.k * res.x + l1.b; //подставляем найденный x в уравнение любой из прямых } return res; } //Решение function solution(abcd,rq){ //Находим точки пересечения отрезка со сторонами прямоугольника // Тут у всего получение наклона и смещение console.log('RQ'); let lineRQ = getLine(rq.r, rq.q); console.log('AB'); let lineAB = getLine(abcd.a, abcd.b); console.log('BC'); let lineBC = getLine(abcd.b, abcd.c); console.log('CD'); let lineCD = getLine(abcd.c, abcd.d); console.log('AD'); let lineAD = getLine(abcd.a, abcd.d); // Тыкает луч в каждую стенку, которая тоже является лучём let preRresult = [ solveSystem(lineRQ,lineAB), solveSystem(lineRQ,lineBC), solveSystem(lineRQ,lineCD), solveSystem(lineRQ,lineAD), ] console.log(preRresult); let result = []; // Проверяем, что точки существуют и находятся в пределах прямоугольника // Сбор полученных результатов preRresult.forEach(el => { if( // Не являются параллельными el.x !== undefined && el.y !== undefined && // Находятся внутри прямоугольника el.x >= abcd.a.x && el.x <= abcd.c.x && el.y >= abcd.a.y && el.y <= abcd.c.y){ result.push(el); } }); // Выкидываем дубли, которых и так не должно быть return [... new Set(result)]; //убираем повторы } let abcd = setABCD(); let rq = setRQ(abcd); console.log(solution(abcd,rq)); } /* Кратко: Ограничила с права и лев И пуляем луч во все 4 стороны, отслеживая попадания во все стенки Далее отсеиваем всё, что вне зоны Получается, что так же стреляет в каждую стенку, где и стенка, как бесконечный луч и луч тоже бесконечный а потом отсеивает все попадания вне прямоугольника Да, оптимальнее увеличивать линию, и смотреть пересечение каждой стенки */

sql Удалить дубликаты

DELETE p1 FROM pages p1 INNER JOIN pages p2 WHERE p1.url = p2.url AND p1.id > p2.id;

Ссылки на сторонние сайты, чтоб без сео

<a href="" rel="nofollow" target="_blank"></a>

Добавить строку в гугл таблицу

Добавить инфу в гугл таблицу через макросы. Форма отправляет фетч-запрос let formBody = []; for (let property in details) { let encodedKey = encodeURIComponent(property); let encodedValue = encodeURIComponent(details[property]); formBody.push(encodedKey + "=" + encodedValue); } formBody = formBody.join("&"); const result = await fetch(URL_APP, { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8", }, mode: "cors", body: formBody, }) А макрос его принимает function doPost(e) { const sheets = SpreadsheetApp.openByUrl(SHEETS_URL); const sheet = sheets.getSheetByName(SHEET_NAME); const errors = []; let { entity, distr, city, name, phone, mail, privacy } = e.parameter; sheet.appendRow([new Date(), entity, distr, city, name,' ' + phone, mail, privacy, 'не обработана']);} В коде еще есть валидация на каждой стороне, но основной обмен вот

Самый умный 6 (от Кулянина)

Самый умный (от сбер но глуповат)

Самый умный 4 (GPT4 но шлёт)

Самый умный 5 (от Оксаны Для кода)

Секреты богатства от gpt

1. Установи ясные финансовые цели и разработай план для их достижения. Будь нацелен и решителен! 2. Инвестируй свои деньги разумно. Изучи различные инвестиционные возможности, разнообразь свой портфель, учитывая свой уровень риска. 3. Развивай свои навыки и получай новые знания. Чем больше ты знаешь, тем больше возможностей открывается перед тобой. 4. Создай эффективный бюджет и придерживайся его. Умение контролировать свои расходы и управлять финансами очень важно. 5. Старайся зарабатывать passively - получать доход пассивными способами. Это может быть аренда недвижимости, инвестиции, авторские права и т. д. 6. Будь предприимчивым и ищи новые возможности. Иногда лучший путь к богатству заключается в создании своего бизнеса. 7. Не забывай о благотворительности. Поделиться своим богатством с другими может приносить огромное удовлетворение.

Установить VS Code на Ubuntu

sudo apt install software-properties-common apt-transport-https wget wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" sudo apt update sudo apt install code

Перевод денежки на кошелёк

Файловые системы

ext4 является файловой системой, используемой в операционных системах Linux, в то время как exFAT и NTFS используются в операционных системах Windows. Вот некоторые преимущества ext4 по сравнению с exFAT и NTFS: ext4: + Улучшенная производительность чтения и записи данных. В ext4 реализованы оптимизации, которые повышают скорость обработки файловой системы. + Более быстрая проверка и восстановление файловой системы в случае сбоев или ошибок. + Поддержка более надежной журналированной файловой системы. Журналирование позволяет избежать повреждения данных при неожиданном отключении питания или сбое системы. + Поддержка файлов размером более 16 терабайт и объемом раздела до 1 экзабайта. exFAT: + Хорошая совместимость с различными операционными системами, включая Windows, macOS и Linux. + Поддержка файлов размером более 4 гигабайт и объемом раздела до 128 петабайт. + Простота использования и настройки. exFAT обеспечивает удобство в работе с файлами и каталогами. NTFS: + Поддержка разреженного размещения файлов, сжатия данных и шифрования файловой системы. + Встроенная поддержка разрешений доступа и системы безопасности для файлов и папок. + Возможность восстановления файлов системными средствами и восстановления удаленных файлов из корзины. В конечном счете, выбор файловой системы зависит от ваших потребностей и предпочтений, а также от операционной системы, которую вы используете. Какая из них является максимально безопасной? Чтоб не потерять файлы.. Когда речь идет о безопасности файлов и предотвращении потери данных, NTFS обычно считается более надежной файловой системой, чем exFAT и ext4. Вот почему: + Журналирование: NTFS использует журналирование файловой системы, что обеспечивает дополнительную защиту от повреждения данных в случае сбоев или неожиданного отключения питания. Журнал записывает изменения перед их фактическим применением к файловой системе, что позволяет восстановить данные до последней записи в журнал. + Встроенные механизмы восстановления: NTFS включает функции восстановления файловой системы, которые помогают восстановить поврежденные файлы и папки. Они могут быть использованы для восстановления случайно удаленных файлов или файлов, поврежденных в результате ошибок. + Разрешения доступа и система безопасности: NTFS поддерживает сложные системы разрешений доступа и системы безопасности, что позволяет точно настроить права доступа к файлам и папкам. Это может помочь предотвратить несанкционированный доступ к вашим данным. Однако важно отметить, что ни одна файловая система не является абсолютно безопасной от потери файлов. Регулярное создание резервных копий важно для защиты данных от любых возможных сбоев или непредвиденных обстоятельств.

Консольная программа arch Linux для очистки диска, заполнения его 0

Для просто очистки https://h7team.ru/item/232/ Для очистки диска и заполнения его нулями в Arch Linux можно использовать утилиту dd. Вот команда, которая поможет вам выполнить это действие: bash dd if=/dev/zero of=/dev/<название_диска> Пожалуйста, обратите внимание, что эта команда будет полностью стирать все данные на указанном диске. Убедитесь, что вы выбрали правильный диск, чтобы не удалить что-то важное! Также, имейте в виду, что процесс заполнения диска нулями может занять длительное время, особенно для больших дисков. Подробное объяснение команды dd if=/dev/zero of=/dev/<название_диска>: dd - это утилита командной строки, которая используется для копирования и преобразования данных. if=/dev/zero - это опция if (input file), которая указывает dd использовать /dev/zero как исходный файл данных. /dev/zero является специальным файлом в Linux, который генерирует бесконечную последовательность нулей. of=/dev/<название_диска> - это опция of (output file), которая указывает dd записывать данные в указанный диск. Замените <название_диска> на имя диска, который вы хотите очистить. Например, /dev/sda или /dev/nvme0n1. Таким образом, команда dd if=/dev/zero of=/dev/<название_диска> означает, что вы копируете бесконечную последовательность нулей с /dev/zero и записываете ее на указанный диск. Это приведет к заполнению всего диска нулевыми значениями, полностью очищая его. Может потребоваться время для завершения операции, особенно для больших дисков. Чтобы узнать список доступных дисков можете использовать команду lsblk. lsblk Вам будет показано подобное сведение: Plain Text NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 238.5G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi ├─sda2 8:2 0 40G 0 part / └─sda3 8:3 0 197.5G 0 part /home sdb 8:16 0 1.8T 0 disk Здесь sda и sdb - это имена дисков. SIZE указывает их размеры. Выберите нужный диск, замените <название_диска> в вашей команде на соответствующее имя диска. Например, если вы хотите записать в sdb, команда будет выглядеть следующим образом: Plain Text dd if=/dev/zero of=/dev/sdb

termux android Ubuntu

Andronix VNC Viewer Termux XServer XSDL nano ./start-ubuntu20.sh #!/data/data/com.termux/files/usr/bin/bash cd $(dirname $0) ## unset LD_PRELOAD in case termux-exec is installed unset LD_PRELOAD command="proot" command+=" --kill-on-exit" command+=" --link2symlink" command+=" -0" command+=" -r ubuntu20-fs" if [ -n "$(ls -A ubuntu20-binds)" ]; then for f in ubuntu20-binds/* ;do . $f done fi command+=" -b /dev" command+=" -b /proc" command+=" -b /sys" command+=" -b /data" command+=" -b ubuntu20-fs/root:/dev/shm" command+=" -b /proc/self/fd/2:/dev/stderr" command+=" -b /proc/self/fd/1:/dev/stdout" command+=" -b /proc/self/fd/0:/dev/stdin" command+=" -b /dev/urandom:/dev/random" command+=" -b /proc/self/fd:/dev/fd" command+=" -b /data/data/com.termux/files/home/ubuntu20-fs/proc/fakethings/stat:/proc/stat" command+=" -b /data/data/com.termux/files/home/ubuntu20-fs/proc/fakethings/vmstat:/proc/vmstat" command+=" -b /data/data/com.termux/files/home/ubuntu20-fs/proc/fakethings/version:/proc/version" ## uncomment the following line to have access to the home directory of termux #command+=" -b /data/data/com.termux/files/home:/root" command+=" -b /sdcard" command+=" -w /root" command+=" /usr/bin/env -i" command+=" MOZ_FAKE_NO_SANDBOX=1" command+=" HOME=/root" command+=" PATH=/usr/local/sbin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/games:/usr/local/games" command+=" TERM=$TERM" command+=" LANG=C.UTF-8" command+=" /bin/bash --login" com="$@" if [ -z "$1" ];then exec $command else $command -c "$com" fi nano ./start_vnc.sh #! /bin/bash rm -f /root/.vnc/localhost:1.pid && rm -f /tmp/.X1-lock && rm -f /tmp/.X11-unix/X1 && vncserver :1 -geometry 1280x1280 #800x800 #1024x768

Что взять в больницу

Купить: Салфетки влажные и сухие Туалетка Зубная паста, зубная щетка, мыло, шампунь Чехол для мыла и щетки Вода 2 по 1.5 С дома: Зарядник для телефона Тапочки, удобная одежда домашний костюм, футболки, шорты или спортивные штаны. 3 пары носков, 3 пары трусов Полотенце По необходимости: Очки Книги Еда Таблетки Тарелка вилка ложка кружка

sql перенос пользователей

Перенос пользователей INSERT INTO survey1 (telegram_id) SELECT users.telegram_id FROM voices LEFT JOIN users ON voices.user_id = users.id WHERE voices.item_id = '172'; Перенос новых пользователей INSERT INTO survey1 (telegram_id) SELECT users.telegram_id FROM voices LEFT JOIN users ON voices.user_id = users.id WHERE voices.item_id = '172' AND users.telegram_id NOT IN (SELECT telegram_id COLLATE utf8mb4_general_ci FROM survey1);

Вложенные sql запросы

SELECT table2.kol2 AS quantity, table2.item_id AS item_id, items.name AS name FROM ( SELECT COUNT(*) AS kol2, `item_id` FROM ( SELECT COUNT(*) AS kol, `user_id`, `item_id` FROM `voices` GROUP BY `user_id` HAVING kol = 1 ) AS table1 GROUP BY `item_id` HAVING kol2 > 2 ORDER BY kol2 DESC ) AS table2 LEFT JOIN items ON items.ID = table2.item_id

bash как отправить текст в телеграмм бот в linux консоли?

Для отправки текстового сообщения в Телеграм-бота из bash-скрипта можно использовать Telegram Bot API и отправить POST-запрос с помощью утилиты curl. Вот пример: #!/bin/bash # Замените <YOUR_BOT_TOKEN> на токен вашего бота BOT_TOKEN="<YOUR_BOT_TOKEN>" # Замените <CHAT_ID> на ID чата или пользователя, которому вы хотите отправить сообщение CHAT_ID="<CHAT_ID>" # Замените <YOUR_MESSAGE> на ваше текстовое сообщение MESSAGE="<YOUR_MESSAGE>" # Отправка POST-запроса для отправки сообщения через Telegram Bot API curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d "chat_id=$CHAT_ID" -d "text=$MESSAGE" Кратко BOT_TOKEN="" CHAT_ID="" MESSAGE="" curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d "chat_id=$CHAT_ID" -d "text=$MESSAGE" Вы должны вставить токен вашего бота в переменную BOT_TOKEN, указать ID чата или пользователя в переменной CHAT_ID, а затем задать текстовое сообщение в переменной MESSAGE. Не забудьте предоставить права на исполнение скрипта с помощью команды chmod +x script.sh. Таким образом, когда вы запустите скрипт, он отправит указанное вами сообщение в указанный чат через вашего Телеграм-бота. Помните, что для использования Telegram Bot API вам необходимо предварительно создать своего бота и получить токен.

Quake Live quake 3 arena

угол обзора /cg_fov 115 /g_gametype sniper Подключаемся ipconfig ifconfig /connect 192.168.__.__:27960 /connect 192.168.3.2:27960 :27015 Добавить ботов /addbot Trainer 5 0 1000 Trainer1 /addbot Hunter 5 0 1000 Hunter1 /addbot Slash 5 0 1000 Slash1 /addbot Mynx 5 0 1000 Mynx1 /addbot Crash 5 0 1000 Crash1 /addbot Daemia 5 0 1000 Daemia1 /addbot Major 5 0 1000 Major1 /addbot Angel 5 0 1000 Angel_top /addbot Lucy 5 0 1000 Lucy1 Добавляем карты /home/admin/.steam/steam/steamapps/common/Quake Live/baseq3/ /map_restart /fraglimit 100 /timelimit 10 net_port узнать свой порт /map Asylum mapname - узнать название карты http://planetquake.gamespy.com/Viewb04f.html?view=Guides.Detail&id=53&game=4

Изменить права на директорию папку bash sh linux

ls -alh /var/www/site.com/bootstrap Узнать, какие права у другой папки или файла stat -c "%a" /var/www/site.com ls -ld /var/www/site.com Установка прав sudo chmod -R 755 /var/www/site.com/bootstrap/cache sudo chown -R www-data:www-data /var/www/site.com/bootstrap/cache sudo chown -R user:www-data /var/www/site.com/bootstrap/cache Вместо user:www-data Используй www-data:www-data Список доступных пользователей cat /etc/passwd | cut -d: -f1

Вампиры

Драконы

sql как сбросить id у таблицы до 1 ?

Чтобы сбросить значения столбца с идентификационными номерами (ID) в таблице SQL до 1, вы можете воспользоваться командой `ALTER TABLE` вместе с функцией `AUTO_INCREMENT`. Здесь предполагается, что вы используете базу данных MySQL. Если вы используете другую СУБД, синтаксис может немного отличаться. Вот пример SQL-запроса: ```sql ALTER TABLE your_table_name AUTO_INCREMENT = 1; ``` Замените `your_table_name` на имя вашей таблицы. Этот запрос установит автоинкрементное значение в столбце ID обратно на 1 для всех будущих записей, добавляемых в таблицу. Однако обратите внимание, что это не изменит существующие записи в таблице, их ID останутся прежними.

Рот

Настройки php сервера для битрикс

for ubuntu server apt install nginx php8.1 php8.1-fpm php8.1-mbstring php8.1-curl php8.1-imap php8.1-mysql php8.1-xml php8.1-xmlrpc php8.1-xsl php8.1-zip php8.1-opcache php8.1-pgsql php8.1-soap php8.1-gd freetype2 mariadb-server mariadb-client nano /etc/php/8.1/fpm/php.ini short_open_tag = On max_input_vars = 10000 memory_limit = 512M zlib.output_compression = On post_max_size = 512M upload_max_filesize = 1G mbstring.internal_encoding = UTF-8 opcache.revalidate_freq=0 nano /etc/php/8.1/fpm/pool.d/www.conf pm.max_children = 16 service php8.1-fpm restart systemctl enable php8.1-fpm.service nano /etc/mysql/mariadb.conf.d/50-server.cnf key_buffer_size = 3G max_allowed_packet = 3G max_connections = 1000 mysql_secure_installation mysql -u root -p CREATE DATABASE base1; CREATE USER 'user1' IDENTIFIED BY 'password1'; GRANT ALL ON base1.* TO 'user1'@localhost IDENTIFIED BY 'password1'; FLUSH PRIVILEGES; exit systemctl restart mariadb.service systemctl enable mariadb.service mkdir /var/www/site.com/ wget https://dev.1c-bitrix.ru/download/scripts/bitrix_server_test.php -P /var/www/site.com wget https://www.1c-bitrix.ru/download/files/scripts/restore.php -P /var/www/site.com //cp /root/bitrix_server_test.php /var/www/site.com/ //cp /root/restore.php /var/www/site.com/ chmod -R 755 /var/www/site.com/ chown -R www-data:www-data /var/www/site.com/ nano /etc/nginx/sites-enabled/site.com.conf systemctl restart nginx.service systemctl enable nginx.service

Секрет счастья в том

Секрет счастья в том, чтоб перестать к нему стремиться.. Пока ты чего-то хочешь, ты этого не имеешь.. Тот кто что-то отдаёт, тот в этом не нуждается.. Люди постоянно хотят что-то иметь кем-то быть Что-то делать.. Воспиятие.. Маленькая свечка может осознать себя светом) Люди, которые любят своё дело, добиваются больше, чем те, кто гонятся за результатом Успех не делает нас счастливее, а счастье делает нас успешными) Важно: Правильное питание, регулярная физическая активность и достаточный сон Человек получает то, что выбирает

Проверить json онлайн

Доступ для запросов с другого сайта php ajax

// Заголовки для разрешения доступа чтения с другого сайта header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Accept, X-PINGOTHER, Content-Type');

Как узнать, Что важно для меня в жизни?

Чтобы выяснить, что важно для вас в жизни, вам нужно провести глубокую рефлексию и самоанализ. Вот несколько шагов, которые могут помочь вам определить ваши ценности и то, что действительно важно для вас: Ведение дневника: Начните вести дневник, в котором будете записывать свои мысли, чувства и переживания. Это поможет вам лучше понимать свои реакции на различные события и ситуации. Рефлексия: Проводите время в одиночестве, задавая себе вопросы о том, что приносит вам удовлетворение и счастье. Например: Какие моменты в жизни я считаю наиболее значимыми? Какие деяния и достижения приносят мне гордость? В чем заключается смысл моей жизни? Анализ образцов поведения: Попробуйте проанализировать свое поведение и реакции на определенные ситуации. Какие решения вы принимаете и почему? Это может дать подсказки о ваших ценностях. Обсуждение с близкими: Поговорите с близкими друзьями или семьей о ваших мыслях и чувствах. Они могут предоставить вам ценную обратную связь и перспективу. Исследование разных областей: Интересы и ценности могут изменяться со временем. Попробуйте новые хобби, учите новые навыки, исследуйте разные области жизни. Это поможет вам определить, что вас действительно привлекает. Учеба у других: Изучайте жизненные истории и мнения других людей, особенно тех, кого вы уважаете. Иногда увидеть, что важно для других, может помочь вам понять, что важно для вас. Постоянная рефлексия: Помните, что это процесс, который может занимать время. Ваши ценности и приоритеты могут меняться, и это нормально. Постоянно задавайте себе вопросы о том, что действительно важно для вас, и стремитесь выстраивать свою жизнь в соответствии с этими ценностями.

Как узнать свои ценности и цели жизни?

Понимание своих ценностей и целей жизни - это процесс самопознания, который может потребовать времени и рефлексии. Вот несколько шагов, которые могут помочь вам определить свои ценности и цели: 1. Рефлексия: a. Вопросы: Что важно для меня в жизни? Чем я горжусь в своем опыте или достижениях? В чем я видел смысл и удовлетворение раньше? b. Дневник: Ведите дневник, в котором записывайте свои мысли, чувства и вдохновение. Анализируйте свои записи, чтобы выделить общие темы и идеи. 2. Определение целей: a. Короткосрочные и долгосрочные цели: Определите небольшие шаги (короткосрочные цели), которые могут помочь вам приблизиться к вашей большой цели (долгосрочная цель). b. Ум SMART: Цели должны быть конкретными (Specific), измеримыми (Measurable), достижимыми (Achievable), релевантными (Relevant) и ограниченными по времени (Time-bound). 3. Общение и опыт: a. Общение: Обсудите свои мысли и идеи с близкими людьми, друзьями или терапевтом. Получите обратную связь и взгляд извне. b. Опыт: Испытайте новые вещи и узнавайте о себе через опыт. Не бойтесь совершать ошибки; они тоже могут приблизить вас к пониманию себя. 4. Постоянная рефлексия: a. Регулярные проверки: Периодически задавайте себе вопросы о ваших ценностях и целях. Изменяются ли они со временем? Почему? b. Готовность к изменениям: Будьте готовы к тому, что ваши ценности и цели могут меняться по мере того, как вы растете и развиваетесь. Не спешите. Самопознание - это длительный и непрерывный процесс. Позвольте себе исследовать и понимать себя глубже.