Linux nobaraproject

Если не запускается оболочка, то зажимаем 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 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 Установить sudo dnf install firefox telegram -y && 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 inxi -G sudo kroko-cli get-gpus sudo kroko-cli best-driver sudo kroko-cli autoinstall

Файл не является графическим. Обмен 1С и битрикс

/bitrix/admin/1c_exchange.php /upload/1c_exchange Логирование обмена https://h7team.ru/item/130/ $MESS["FILE_BAD_FILE_TYPE"] = "Файл не является графическим"; /bitrix/modules/main/lang/ru/classes/general/file.php Вот тут вызов /bitrix/modules/main/classes/general/file.php В /bitrix/modules/main/classes/general/file.php Перед 3 return GetMessage("FILE_BAD_FILE_TYPE") Добавляем $file1 = fopen($_SERVER['DOCUMENT_ROOT'].'/logs/img.php', "a"); fwrite($file1, '<?php exit(); ?>'.date("Ymd H:i.s").' '.print_r([ '$arFile' => $arFile, '$iMaxSize' => $iMaxSize, '$iMaxWidth' => $iMaxWidth, '$iMaxHeight' => $iMaxHeight, '$access_typies' => $access_typies, '$bForceMD5' => $bForceMD5, '$bSkipExt' => $bSkipExt, '$imgInfo' => $imgInfo, '$flashEnabled' => $flashEnabled ], true)); fclose($file1);

Записываем логи обмена 1С и битрикс

в /bitrix/admin/1c_exchange.php <? //exit(); $recording_logs = true; function h7_add_log($array) { $maximum_size = 1048576 * 5; // 1mb $text = "\n\n\n@ ".date("Ymd H:i.s")."\n".print_r($array, true); $url = $_SERVER['DOCUMENT_ROOT'].'/logs/log.php'; // $_SERVER['DOCUMENT_ROOT']. if (file_exists($url)) { if (filesize($url) > $maximum_size) { rename($url, $_SERVER['DOCUMENT_ROOT'].'/logs/log_'.date("Ymd_His").'.php'); $text = "<?php return; ?>$text"; } } else { $text = "<?php return; ?>$text"; } $file = fopen($url, "a"); fwrite($file, $text); fclose($file); } if ($recording_logs) { $result = []; $content = file_get_contents('php://input'); if (!empty($content)) $result['HAVE_CONTENT'] = true; foreach (['GET', 'POST', 'COOKIE', 'FILES'] as $i => $name) { $value_name = '_'.$name; $value = $$value_name; if (!empty($value)) $result[$name] = $value; } if ( isset($_GET['type']) && isset($_GET['mode']) && isset($_GET['filename']) && $_GET['type'] === 'catalog' && $_GET['mode'] === 'import' && file_exists($_SERVER['DOCUMENT_ROOT'].'/upload/1c_catalog/'.$_GET['filename']) && !file_exists($_SERVER['DOCUMENT_ROOT'].'/logs/'.$_GET['filename']) && copy( $_SERVER['DOCUMENT_ROOT'].'/upload/1c_catalog/'.$_GET['filename'] , $_SERVER['DOCUMENT_ROOT'].'/logs/'.$_GET['filename'] ) ) { $result['FILE_SAVE'] = $_GET['filename']; } if (!empty($result)) { $result['DATE'] = date("Y-m-d H:i:s"); $result['IP'] = $_SERVER['REMOTE_ADDR']; $result['HEADERS'] = getallheaders(); h7_add_log($result); } } function save_buffer($buffer) { h7_add_log([ 'DATE' => date("Y-m-d H:i:s"), 'ANSWER' => $buffer ]); return $buffer; } if ($recording_logs) { ob_start('save_buffer'); } require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/admin/1c_exchange.php"); if ($recording_logs) { ob_end_flush(); }

php создать быстро логи logs

$file1 = fopen($_SERVER['DOCUMENT_ROOT'].'/logs/log.php', "a"); fwrite($file1, '<?php exit(); ?>'.date("Ymd H:i.s").' '.print_r([ '$arFile' => $arFile, ], true)); fclose($file1);

Sqlite3 в php

// Если нет файла, то создаёт $db = new SQLite3('./test.db'); $db->close(); //Открываем другую базу данных для работы $db->open("another.db"); //Удаляем объект unset($db); CREATE TABLE users(id INTEGER, name TEXT, age INTEGER) id INTEGER PRIMARY KEY AUTOINCREMENT //Экранирование строк $name = $db->escapeString($name); //Для запросов без выборки данных $sql = "INSERT INTO users (name, age) VALUES ('$name', 25)"; //Возвращает значение булева типа $result = $db->exec($sql); //Количество изменённых записей echo $db->changes(); //Отслеживание ошибок echo $db->lastErrorCode(); echo $db->lastErrorMsg(); Есть возможность готовить запрос $sql = "INSERT INTO users (name, age) VALUES (:name, :age)"; //Готовим запрос $stmt = $db->prepare($sql); //Привязываем параметры $stmt->bindParam(':name',$name); $stmt->bindParam(':age',$age); //Исполняем запрос $result = $stmt->execute(); //Закрываем при необходимости $stmt->close(); $sql = "SELECT name, age FROM users"; // В случае неудачи возвращает false $result = $db->querySingle($sql); //В $result - значение первого поля первой записи $result = $db->querySingle($sql, true); // В $result - массив значений первой записи // Стандартная выборка $result = $db->query($sql); // Обработка выборки $row = $result->fetchArray(); // SQLITE3_BOTH // Получаем ассоциативный массив $row = $result->fetchArray(SQLITE3_ASSOC); // Получаем индексированный массив $row = $result->fetchArray(SQLITE3_NUM); Прога для просмотра Sqliteman, для винды https://sourceforge.net/projects/sqliteman/files/latest/download Или https://sqlitebrowser.org/

Популярные вопросы по 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) } }

Golang SQLite example

Представим, что у нас есть база данных SQLite с таблицей "users", в которой хранится информация о пользователях в следующем формате: - ID (целое число, первичный ключ) - Name (текстовое поле) - Age (целое число) Для того, чтобы работать с этой базой данных в Golang, необходимо установить пакет "database/sql" и драйвер SQLite "mattn/go-sqlite3". 1. Подключение к базе данных: Для начала необходимо открыть соединение с базой данных. Это можно сделать следующим образом: ``` import ( "database/sql" _ "github.com/mattn/go-sqlite3" ) func main() { db, err := sql.Open("sqlite3", "./users.db") if err != nil { panic(err) } defer db.Close() } ``` В данном примере мы открыли соединение с базой данных "users.db", которая находится в той же директории, что и программа. 2. Создание таблицы: Для создания таблицы необходимо выполнить SQL-запрос на языке SQL: ``` _, err = db.Exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)") if err != nil { panic(err) } ``` Здесь мы создали таблицу "users" со столбцами "id", "name" и "age". 3. Добавление записи в таблицу: Для добавления новой записи в таблицу необходимо выполнить SQL-запрос на языке SQL c использованием метода "Prepare" и "Exec" объекта "db": ``` stmt, err := db.Prepare("INSERT INTO users(name, age) values(?, ?)") if err != nil { panic(err) } defer stmt.Close() _, err = stmt.Exec("John", 30) if err != nil { panic(err) } ``` Здесь мы добавляем запись в таблицу "users" с именем "John" и возрастом 30. 4. Выборка данных из таблицы: Для выборки данных необходимо выполнить SQL-запрос на языке SQL c использованием метода "Query" объекта "db": ``` rows, err := db.Query("SELECT id, name, age FROM users") if err != nil { panic(err) } defer rows.Close() for rows.Next() { var id int var name string var age int err = rows.Scan(&id, &name, &age) if err != nil { panic(err) } fmt.Println(id, name, age) } ``` Здесь мы выбираем все записи из таблицы "users" и выводим их на экран. 5. Обновление записи в таблице: Для обновления записи необходимо выполнить SQL-запрос на языке SQL c использованием метода "Prepare" и "Exec" объекта "db": ``` stmt, err = db.Prepare("UPDATE users SET age = ? WHERE name = ?") if err != nil { panic(err) } defer stmt.Close() _, err = stmt.Exec(35, "John") if err != nil { panic(err) } ``` Здесь мы обновляем возраст пользователя "John" на 35 лет. 6. Удаление записи из таблицы: Для удаления записи необходимо выполнить SQL-запрос на языке SQL c использованием метода "Prepare" и "Exec" объекта "db": ``` stmt, err = db.Prepare("DELETE FROM users WHERE name = ?") if err != nil { panic(err) } defer stmt.Close() _, err = stmt.Exec("John") if err != nil { panic(err) } ``` Здесь мы удаляем пользователя по имени "John" из таблицы "users". Это только небольшой пример использования Golang и SQLite. С помощью этих методов можно выполнять различные операции с базой данных SQLite и получать необходимые данные.

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

Те слова, которые часто спрашивают на собеседованиях.. Так то ими ты можешь пользоваться, просто не знать, как это называется.. Функция высшего порядка — в программировании функция, принимающая в качестве аргументов другие функции или возвращающая другую функцию в качестве результата. 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. Динамическое программирование способ решения сложных задач путём разбиения их на более простые подзадачи. Часто многие из этих подзадач одинаковы. Подход динамического программирования состоит в том, чтобы решить каждую подзадачу только один раз, сократив тем самым количество вычислений. Это особенно полезно в случаях, когда число повторяющихся подзадач экспоненциально велико.

bitrix lom лом

<?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); global $USER; $USER->Authorize(1); ?><a href="/">1</a>

golang book 9

карты var myMap map[string]float64 = make(map[string]float64) var myMap map[string]float64{} создание карты myMap = make(map[string]int) myMap["bro"] = 5 fmt.Println(myMap["bro"]) литералы var myMap map[string]float64{ "a":4.5, "b":5.6 } при обращении к несуществующему ключу, будет выведен нулевой ответ, или пустая строка если обьявить карту, но не запихнуть туда значения, то сама переменная карты будет nil от карты можно получить 2 значения value, ok := myMap["a"] где ok будлево и означает была ли заполнена ячейка по ключу если проверить, есть ли ключ, то _, ok := myMap["a"] package main import ( "fmt" ) func main() { list := []string{ "kot", "kot", "sova", "kot", "stol", "sova", "kot", "kot", } myMap := map[string]int{} for _, name := range list { item, ok := myMap[name] if ok { item++ } else { item = 1 } myMap[name] = item } fmt.Printf("%#v\n", myMap) } Если надо удалить ключ и значение delete(myMap, "a") перебор карты for key, value := range myMap {} если только ключи, то for key := range myMap {} но порядок их доставания разный.. сортировка import "sort" names := []string{"b", "c","a"} sort.Strings(names) sort.Ints() Структуры var myStruct := struct { v1 string v2 int } При создании, полям присваивается нулевое значение myStruct.v2 = 5 создаем свой тип type myType struct { } обычно пишется после импорта var v3 myType если вы придумали тип, то нельзя назвать так переменную При изменении структуры через ссылку, необходимо обращаться к самой структуре package main import "fmt" type user struct { name string age int } func addAge(user0 *user) { user0.age++ } func main() { var user1 user user1.name = "ytatav" user1.age = 19 addAge(&user1) fmt.Printf("%#v\n", user1) } // main.user{name:"ytatav", age:20} чтоб обратиться к полю структуры по указатклю var value myStruct value.myFiled = 3 var pointer *myStruct = &value fmt.Println((*pointer).myFiled) можно заменить fmt.Println(pointer.myFiled) при передаче указателей на структуры сильно экономит память структуры лучше хранить в src в headfirstgo Для подключения пакета, где хранится тип package magaz type Product struct { Name string Price int } package main import ( "magaz" ) func main() { var s magaz.Product } Короткие записи структур Литераллы tovar := Product{Name:"aaa", Price:456} Если не заполните поле, то там будет нулевой элкмент текущего типа в структуре модет быть другая структура type Product struct { Name string Price int marka1 marka } product.marka1.name когда структура внутри структуры, то можно забить на ее имя type Product struct { Name string Price int marka } тогда обращаться станет проще product.marka.name1 если это встроенно, то можно сразу product.name1 без марки можно определить тип, который не отличается от стандартного type Liters float64 type Gallons float64 var carF Gallons = Gallons(10.0) преобразовать carF = Gallons(Litters(40.0) * 0.264) просто один тип вставляем в другой создать метод новый func (m MyType) sayHi() { fmt.Println("Hi ", m) } value := MyType("world") value.sayHi() методы можно определять только там, где определен тип Litters(2).toGallons() package main import "fmt" type Num int func (n *Num) Double() { *n *= 2 } func main() { n1 := Num(4) fmt.Println("orig ", n1) n1.Double() fmt.Println("new ", n1) } func (l Liters) ToGallons() Gallons { return Gallons(l * 0.264) } func (g Gallons) ToLiters() Liters { return Liters(g * 3.785) } func (g Gallons) ToMilliliters() Milliliters { return Milliliters(g * 3785.41) } package main import ( "fmt" ) type Date struct { Year int Month int Day int } func (d *Date) SetYear(year int) { d.Year = year } func main() { date := Date{} date.SetYear(2023) fmt.Println(date.Year) } ошибки при присваивании подключаем errors а в самих функциях if year < 1 { return errors.New("inval year") } d.Year = year return nil а с наружи принимать так же if err != nil { log.Fatal(err) } Чтоб не давать прямой доступ переменным структур то выносим их в отдельный пакет, начало их делаем с маленькой буквы функции для записи и доставания делаем с большой буквы для сохранения date.SetDay(5) для получения date.Day() инкапсуляция - скрытие данных однойчасти программы от кода другой

Golang download bitrix backup

package main import ( "fmt" "io" "net/http" "os" "strings" ) func main() { fmt.Println("start") url := "https://site.com/bitrix/backup/123.tar" for i := 0; i < 100; i++ { if i == 0 { downloadFile(url) } else { newUrl := fmt.Sprintf("%s.%d", url, i) downloadFile(newUrl) } } } func downloadFile(url string) { fmt.Println("Скачиваю ", url) // Создаем HTTP-запрос req, err := http.NewRequest("GET", url, nil) if err != nil { fmt.Println("Не удалось создать запрос:", err) return } // Выполняем запрос resp, err := http.DefaultClient.Do(req) if err != nil { fmt.Println("Не удалось выполнить запрос:", err) return } defer resp.Body.Close() // Получаем имя файла из заголовков ответа /* filename := resp.Header.Get("Content-Disposition") if filename == "" { // Если имя файла не указано в заголовках, то сгенерируем его случайным образом filename = "file.zip" } */ urlArray := strings.Split(url, "/") filename := urlArray[len(urlArray)-1] // Создаем файл на диске file, err := os.Create(filename) if err != nil { fmt.Println("Не удалось создать файл:", err) return } defer file.Close() // Записываем содержимое файла в созданный файл на диске _, err = io.Copy(file, resp.Body) if err != nil { fmt.Println("Не удалось записать данные в файл:", err) return } fmt.Println("Файл успешно скачан и сохранен:", filename) }

Задачи по программированию Проект Эйлера

Архивировать с консоли sh bash

Архив sudo apt install zip unzip zip -r /path/to/files/* unzip archive.zip zip -r data.zip data/

Свичи клавиши клавы

sql Удалить все данные и индексы с таблицы, пересоздав её

TRUNCATE TABLE articles; TRUNCATE TABLE article_chapter;

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

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

golang example

Дешевый хостинг Хостия

ИИ, который рисует 3D сцену по описанию AI рисовалка

js console bot bitrix Для обьединения дублей контактов

let bot = { getIframe: () => { let iframe = document.getElementsByTagName('iframe')[0]; return iframe.contentDocument || iframe.contentWindow.document; }, time: 500, playStep: (number, timer1) => { if (!timer1) timer1 = bot.time; if (bot.active) setTimeout(() => bot.steps[number](), timer1) }, start: () => { bot.active = true bot.steps[0]() }, active:false, stop: () => { bot.active = false }, steps: [ () => { let element = bot.getIframe().getElementsByClassName('crm-entity-merger-column-btn-radio-mark')[0] if (!element) { bot.playStep(0) return; } element.click() bot.playStep(1) }, () => { bot.getIframe().getElementById('mergeButton').click() bot.playStep(0, 3000) } ] } bot.start()

ИИ рисовалка от сбера

golang book 8

Сегменты тот же массив, но без размера var mySlice []string mySlice = make([]string, 7) example := make([]int, 5) example[0] = 1 len(example) litters := []string{"a", "b"} из массива можно доставать части в сегменты mySlice := myArray[1:3] с какого индекса по какой (до второго индекса, не включая его) достать если часть не указывать myArray[:3] myArray[:] то с начала до конца массива сегмент, это как отрезок массива при изменении сегмента или массива, они видны в обеих случаях append прибавляет в коней сегмента slice = append(slice, "d") но там есть жоп если с одного сегмента создаются разные, и в последнем что-то меняется, то изменения будут только в родителе поэтому лучше при добавлении в сегмент присваивать в тот же сегмент.. так же можно добавлять сразу несколько slice = append(slice, "d", "v") если создать сегмент и не создавать в нем переменные, то сам сегмент вернет nil package main import ( "bufio" "fmt" "log" "os" "strconv" ) func main() { var numbers []float64 file, err := os.Open("data.txt") if err != nil { log.Fatal(err) } scanner := bufio.NewScanner(file) for scanner.Scan() { //fmt.Println(scanner.Text()) number, err := strconv.ParseFloat(scanner.> if err != nil { log.Fatal(err) } numbers = append(numbers, number) } err = file.Close() if err != nil { log.Fatal(err) } if scanner.Err() != nil { log.Fatal(scanner.Err()) } fmt.Printf("%#v\n", numbers) } в случае ошибок с функций, необходимо возвращать пустое значение того же формата и саму ошибку, либо nil вместо пустого значения Аргументы командной строки package main import ( "fmt" "os" ) func main() { fmt.Println(os.Args) } 0 аргумент - всегда путь к программе если надо исключить, то os.Args[1:] Как делать функции с большим количеством параметров? добавить ... перед последним типом func zzz(p1 int, p2 ...string) в p2 передается сегмент package main import ( "fmt" ) func sredn(numbers ...float64) float64 { var sum float64 = 0 for _, number := range numbers { sum += number } return sum / float64(len(numbers)) } func main() { fmt.Println(sredn(100, 50)) fmt.Println(sredn(90.7, 89.7, 98.5, 92.3)) } если вы хотите вставить сегмент вместо нескольких аргументов, то используйте многоточие, после сегмента intSlice := []int{5, 10, 15} myFunc(intSlice...)

golang book 7

если использовать папки, то go install src/hw , в котором есть main.go сохраняет всё в каталог bin GOPATH переменная, путь рабочей области для смены export GOPATH="/code" set GOPATH = "C:/code" эта переменная каждый раз сбрасывается если пакет с гита, то его лучше размещать в src/github.com/user1/keyboard есть быстрая установка с гита go get github.com/user1/keyboard так же можно посмотреть документацию по пакету go doc strconv go doc strconv ParseFloat для добавления своей докумментации // program package p1 // ttt // yyy func ddd() но документация для пакетов должна начинаться со слов Package имя пакета и продолжение комменты для функций должны начинаться с имени функции много документаций на golang.org можно запустить свой сайт с документацией godoc -http=:6060 http://localhost:6060/pkg/ для остановки ctrl c тут будет всё, что установили на ваш комп массивы var myArray [4]string myArray[0] = "do" fmt.Println(myArray[0]) var arr [3]int var arr [5]time.Time что с незаполненн элементами массива, они пустые, либо 0, как и при создании переменных создать и сразу присвоить значения var notes [7]string = [7]string{"do", "re", "mi", "fa", "so", "la", "ti"} notes := [7]string{"do", "re", "mi", "fa", "so", "la", "ti"} text := [3]string{ "This is a series of long strings", "which would be awkward to place", "together on a single line", } с запятой, после последнего, тоже можно через fmt.Println сразу можно выводить массив чтоб отобразить массив через глагол, то %#v fmt.Printf("%#v\n", notes) вывести длину массива fmt.Println(len(notes)) вот безопасный перебор массива for index, value := range myArray { // Блок цикла. } если вам не нужен индекс, то кладем его в мусор переменной _ for _, note := range notes { fmt.Println(note) } превратить инт во float weight := float64(index+1) повар закупает мясо package main import ( "fmt" ) func main() { list := [3]float64{71.8, 56.2, 89.5} var quantity float64 var result float64 for index, number := range list { weight := float64(index+1) quantity += weight result += number * weight fmt.Printf("%f * %f = %f , result = %f\n", number, weight,> } result /= quantity fmt.Println(result) } go install github.com/headfirstgo/average прочитать с файла данные package main import ( "bufio" "fmt" "log" "os" ) func main() { file, err := os.Open("data.txt") if err != nil { log.Fatal(err) } scanner := bufio.NewScanner(file) for scanner.Scan() { fmt.Println(scanner.Text()) } err = file.Close() if err != nil { log.Fatal(err) } if scanner.Err() != nil { log.Fatal(scanner.Err()) } }

Онлайн видео конвертер

golang book 6

func rrr (line string, times int) {} package main import "fmt" func paintWall(width float64, height float64) { area := width * height fmt.Printf("%.2f litters need\n", area/10.0) } func main() { paintWall(4.2, 3.0) paintWall(5.2, 3.5) paintWall(5.0, 3.3) } возврат из функций, в конце скобок пишем, какой тип возвращает, и обязательно должна вернуть func rrr (number int) int { return number*2 } import errors err := errors.New("eee") fmt.Println(err.Error()) fmt.Println(err) log.Fatal(err) err := fmt.Errorf("eee %0.2f", 3.5) fmt.Println(err.Error()) fmt.Println(err) возврат нескольких значений func rrr() (int, bool,string) { return 1, true, "hello" } myInt, myBool, myString := rrr() еще для возвращаемых значений можно задать имя, как подсказки, но возврат не изменится func rrr() (number int, a bool, b string) { func paintWall(width float64, height float64) (float64, error) { if width < 0 { return 0, fmt.Errorf("width < 0 %0.2f", width) } area := width * height return area/10.0, nil } указатели адреса &a amount := 6 fmt.Println(amount) fmt.Println(&amount) // 0x1040a124 можно прочитать тип указателя fmt.Println(reflect.TypeOf(&myInt)) // *int *float64 *bool var myIntPointer *int // эта переменная для хранения указателя myIntPointer = &myInt myIntPointer := &myInt // значение по адресу *myIntPointer myInt := 4 myIntPointer = &myInt fmt.Println(myIntPointer) // 0x104a123 fmt.Println(*myIntPointer) // 4 *myIntPointer = 8 так же обновляется переменная, с которой взят указатель возврат указателя с функции func createPointer() *float64 { myFloat := 98.5 return &myFloat } func main() { var myFloatPointer *float64 = createPointer() fmt.Println(*myFloatPointer) } func printPointer(point *int) { fmt.Println(*point) *point += 1 } показать адрес &a вывести с адреса *b хранения адресов в формате *int функция приёма float с клавиатуры inputFloat() (float64, error) { reader := bufio.NewReader(os.Stdin) input, err := reader.RiadString('\n') if err != nil { return 0, err } input = strings.TrimSpace(input) number, err := strconv.ParseFloat(input, 64) if err != nil { return 0, err } return number, nil } go в папке польз в ней bin тут откомп код самой программы pkg тут откомпил код пакетов src для хранения исходного кода пакеты должны быть обязательно в папках src/my/my.go package my src/hi/main.go основная прога названия пакетов только в нижнем регистре, лучше, чтоб оно состояло из одного слова, если слов несколько, то пишем слитно в едином регистре (strconv) Не используйте переменные, которые называются как пакеты ib/go/src/consoleinput/consoleinput.go package consoleinput import ( "bufio" "os" "strconv" "strings" ) func InputFloat() (float64, error) { reader := bufio.NewReader(os.Stdin) input, err := reader.ReadString('\n') if err != nil { return 0, err } input = strings.TrimSpace(input) number, err := strconv.ParseFloat(input, 64) if err != nil { return 0, err } return number, nil } константы const Ttt int = 3 const Ttt = 3 у них нет := и обычно обьявляются на уровне пакета

sql Если товар пропал с продажи, то удаляет его из избранного

if (!function_exists('get_sql')) { function get_sql() { require($_SERVER['DOCUMENT_ROOT'].'/bitrix/php_interface/dbconn.php'); $sql = new mysqli( $DBHost, $DBLogin, $DBPassword, $DBName ); if ($sql->connect_errno) { add_log([$sql->connect_errno, $sql->connect_error]); return false; } $sql->set_charset('utf8'); return $sql; } } $sql = get_sql(); $sql->query(" DELETE b_redsign_favorite FROM b_redsign_favorite LEFT JOIN b_iblock_element AS element ON b_redsign_favorite.ELEMENT_ID = element.ID AND element.IBLOCK_ID = '20' AND element.ACTIVE = 'Y' WHERE element.ID IS NULL ");

golang book 5

for continue break package main import ( "bufio" "fmt" "log" "math/rand" "os" "strconv" "strings" "time" ) func main() { fmt.Println("Угадай число от 1 до 100") rand.Seed(time.Now().Unix()) var target int = rand.Intn(100) + 1 win := false for i := 10; i >= 0; i-- { reader := bufio.NewReader(os.Stdin) input, err := reader.ReadString('\n') if err != nil { log.Fatal(err) } input = strings.TrimSpace(input) num1, err := strconv.Atoi(input) if err != nil { log.Fatal(err) } if num1 > target { fmt.Println("загаданное число мень> continue } if num1 < target { fmt.Println("загаданное число боль> continue } win = true break } if win { fmt.Println("Победа") } else { fmt.Println("Провал, число было ", target) } } Красивый вывод fmt.Printf("About: %0.2f p", 1.0/3.0) А тут возврат в строку str := fmt.Sprintf("About: %0.2f p", 1.0/3.0) fmt.Printf("About: %s = %d \n", "aaa", 5) fmt.Printf("About: %f p \n", 3.0) буква после % определяет тип глагола %f числ с точк %d число %s строка %t булево true или false %v что угодно %#v тут энтеры и табы не преобразуются \n %T сам тип значения int, string %% знак процента %12s %2d это минимальная длина, если текст меньше, то в начале он дополнится пробелами %5.3f 5 - минимальная ширина всего числа (дробн часть и точк) 3 - ширина дробной части %.3f да так тоже сработает функции func say() {} say() вызов после обьявления функции ее можно будет вызывать если функция должна использ только внутри, то начинай ее с мелкой буквы

Самописная 1С интеграция 1

https://its.1c.ru/db/metod8dev/content/3314/hdoc https://v8.1c.ru/tekhnologii/obmen-dannymi-i-integratsiya/standarty-i-formaty/protokol-obmena-s-saytom/ Обмен данными с Web-сайтом Для решения задачи публикации информации о реализуемом товаре, размещения заказов на сайте, приема и обработки заказов и каталогов товаров непосредственно из интерфейсов системы "1С:Предприятие 8" фирмами "1С" и "1С-Битрикс" разработан открытый протокол взаимодействия WEB-сайта и прикладной торговой системы. Функционально обмен делится на два бизнес-процесса: 1. Выгрузка на сайт коммерческих предложений (каталогов продукции). 2. Прием информации о заказах. Первый бизнес-процесс обеспечивает публикацию на сайте каталога номенклатурных позиций. Второй необходим для передачи с сайта в информационную систему данных о заказах с сайта и дальнейшую синхронизацию статусов и параметров заказов. В обоих случаях инициатором обмена выступает система "1С:Предприятие 8". Обмен электронными документами осуществляется в соответствии с форматами, описанными XML-схемой стандарта CommerceML, редакция 2.04 (Загрузить). Выгрузка каталогов продукции Каталоги для публикации на сайте выгружаются одним пакетом. Начало сеанса Выгрузка каталога начинается с того, что система "1С:Предприятие 8" отправляет http-запрос следующего вида: http://<сайт>/<путь>/1c_exchange.php?type=catalog&mode=checkauth. В ответ система управления сайтом передает системе "1С:Предприятие 8" три строки (используется разделитель строк "\n"): слово "success", имя Cookie, значение Cookie. Все последующие запросы к системе управления сайтом со стороны "1С:Предприятия 8" содержат в заголовке запроса имя и значение Cookie. Запрос параметров от сайта Далее следует запрос следующего вида: http://<сайт>/<путь>/1c_exchange.php?type=catalog&mode=init В ответ система управления сайтом передает две строки: 1. zip=yes, если сервер поддерживает обмен в zip-формате - в этом случае на следующем шаге файлы должны быть упакованы в zip-формате, или zip=no - в этом случае на следующем шаге файлы не упаковываются и передаются каждый по отдельности. 2. file_limit=<число>, где <число> - максимально допустимый размер файла в байтах для передачи за один запрос. Если системе "1С:Предприятие 8" понадобится передать файл большего размера, его следует разделить на фрагменты. Выгрузка на сайт "1С:Предприятие 8" формирует запросы вида: http://<сайт>/<путь>/1c_exchange.php?type=catalog&mode=file&filename=<имя файла> для выгрузки на сайт файлов в формате CommerceML. Обмен происходит в виде POST. В случае успешной записи файла система управления сайтом выдает строку "success". Пошаговая загрузка каталога Из "1С:Предприятия 8" производится пошаговая загрузка каталога по запросу с параметрами вида: http://<сайт>/<путь>/1c_exchange.php?type=catalog&mode=import&filename=<имя файла> Во время загрузки система управления сайтом направляет ответ в одном из следующих вариантов. 1. Если в первой строке содержится слово "progress", это означает необходимость послать тот же запрос еще раз. В этом случае во второй строке будет возвращен текущий статус обработки, объем загруженных данных, статус импорта и т. д. 2. Если в ответ передается строка со словом "success", то это будет означать сообщение об успешном окончании обработки файла. 3. Если в ходе запроса произошла ошибка, то в первой строке ответа системы управления сайтом будет содержаться слово "failure", а в следующих строках - описание ошибки, произошедшей в процессе обработки запроса. 4. Если произошла необрабатываемая ошибка уровня ядра продукта или sql-запроса, то будет возвращен html-код. Прием заказов с сайта Заказы, оформленные на сайте, загружаются в систему "1С:Предприятие 8". При этом соблюдаются следующие 8 правил: 1. При передаче в систему "1С:Предприятие 8" в заказе устанавливается категория "Заказ с сайта". 2. При формировании заказа в системе "1С:Предприятие 8" записываются номер и дата заказа, с которыми он оформлен на сайте. 3. Поиск контрагента осуществляется по ИНН (индивидуальный номер налогоплательщика) или наименованию (в зависимости от настроек). 4. При загрузке заказа производится поиск договора с контрагентом. Договор ищется среди существующих договоров с клиентом, с признаком ведения взаиморасчетов по заказам (по указанной в настройках загрузки Организации). Если не находится ни один договор, то создается новый. 5. При загрузке заказа загружаются все его свойства, переданные с сайта. Свойства ищутся в системе "1С:Предприятие 8" по наименованию. Если с таким наименованием свойства нет, то заводится новое свойство со значениями типа строка или число. 6. Заказ может модифицироваться в системе "1С:Предприятие 8", при этом его изменения будут выгружаться на сайт. 7. Если заказ оплачивается или отгружается в системе "1С:Предприятие 8", то "состояния" заказа по оплате и по отгрузке выгружаются на сайт только при полном выполнении операции (полной оплате и полной отгрузке). До этого момента заказ считается неоплаченным и неотгруженным. 8. После каждой выгрузки заказа на сайт на стороне сайта определяются значения его категорий (ссылка на категории). Эти значения устанавливаются в системе "1С:Предприятие 8" так, как они присвоены заказу на сайте. Начало сеанса Выгрузка каталога начинается с того, что система "1С:Предприятие 8" отправляет http-запрос следующего вида: http://<сайт>/<путь>/1c_exchange.php?type=sale&mode=checkauth. В ответ система управления сайтом передает системе "1С:Предприятие 8" три строки (используется разделитель строк "\n"): слово "success", имя Cookie, значение Cookie. Все последующие запросы к системе управления сайтом со стороны "1С:Предприятия 8" содержат в заголовке запроса имя и значение Cookie. Далее следует запрос следующего вида: http://<сайт>/<путь>/1c_exchange.php?type=sale&mode=init В ответ система управления сайтом передает две строки: 1. zip=yes, если сервер поддерживает обмен в zip-формате - в этом случае на следующем шаге файлы должны быть упакованы в zip-формате, или zip=no - в этом случае на следующем шаге файлы не упаковываются и передаются каждый по отдельности. 2. file_limit=<число>, где <число> - максимально допустимый размер файла в байтах для передачи за один запрос. Если системе "1С:Предприятие 8" понадобится передать файл большего размера, его следует разделить на фрагменты. Получение файла обмена с сайта На сайт отправляется запрос вида: http://<сайт>/<путь>/1c_exchange.php?type=sale&mode=query. Сайт передает сведения о заказах в формате CommerceML. В случае успешного получения и записи заказов "1С:Предприятие 8" передает на сайт запрос вида: http://<сайт>/<путь>/1c_exchange.php?type=sale&mode=success Отправка файла обмена на сайт Система "1С:Предприятие 8" отправляет на сайт запрос вида: http://<сайт>/<путь>/1c_exchange.php?type=sale&mode=file&filename=<имя файла> который загружает на сервер файл обмена, посылая содержимое файла в виде POST. В случае успешной записи файла система управления сайтом передает строку со словом "success". Дополнительно на следующих строчках могут содержаться замечания по загрузке. Если в ходе какого-либо запроса произошла ошибка, то в первой строке ответа системы управления сайтом будет содержаться слово "failure", а в следующих строках - описание ошибки, произошедшей в процессе обработки запроса. Если произошла необрабатываемая ошибка уровня ядра продукта или sql-запроса, то будет возвращен html-код.

golang video 1

// https://www.youtube.com/watch?v=G6eZaX_lgbQ&list=PLP19RjSHH4aE9pB77yT1PbXzftGsXFiGl package main import "fmt" func main() { fmt.Println("HW1") // Числа var a int8 = 5 // -128 127 1byte, 8bit var b int16 = 5 // -32678 32677 2byte, 16bit var c int32 = 5 // -2 000 000 000 до 2 000 000 000, 4byte var d int64 = 5 // 9*10^24 8byte var e uint8 = 5 // 0 255 var f uint16 = 5 // 0 65535 var g uint32 = 5 var h uint64 = 5 var i byte = 5 // == uint8 var i rune = 5 // == int32 var i int = 5 // либо int32 либо int64 var i uint = 5 // либо uint32 либо uint64 var a1 float32 = 31.2 var a1 float64 = 31.2 var c1 complex64 = 1+2i var c1 complex128 = 4+90i var d1 bool = true var d1 bool = false var name string = "test" var ( name = "art" age = 32 ) name, age := "art", 32 } c := fmt.Sprintf("name is %s and year %d", name, age)

golang book 1

go version go fmt hello.go отформатировать код go run hello.go запустить go build hello.go компилировать в ./hello package main import ( "fmt" "math" "strings" ) func main() { fmt.Println(math.Floor(2.75)) fmt.Println(strings.Title("hello world")) fmt.Println('s') //115 } \n \t \" \\ рунна это симвл и его надо в одинарные ковычки + - * / == > < >= <= != ! && || true false Узнать тип reflect.TypeOf(42) создание переменных var a1 int8 при таком создании там уже 0 или false или пустая строка var a1, a2 int8 var a3 int8 = 10 var a1, a2 int8 = 5, 3 var a4 = 4 a5 := 5 a6, a7 := 6, 7 a1 = 5 a1, a2 = 5, 3 если имя переменной или функии с большой буквы, то ее можно использовать в другом пакете, кроме текущего преобразовать тип var a1 int8 = 5 fmt.Println(reflect.TypeOf(float64(a1)))

golang book 2

package main import ( "fmt" "time" ) func main() { var now time.Time = time.Now() var year int = now.Year(); fmt.Println(year) } package main import ( "fmt" "strings" ) func main () { var a1 string = "Hell# w#rld" replacer := strings.NewReplacer("#", "o") a2 := replacer.Replace(a1) fmt.Println(a2) } // коммент /* */ package main import ( "fmt" "reflect" "strings" ) func main() { var a1 string = "Hell# w#rld" replacer := strings.NewReplacer("#", "o") fmt.Println(reflect.TypeOf(replacer)) a2 := replacer.Replace(a1) fmt.Println(a2) } bool1, error := strconv.ParseBool("true") file1, error := os.Open("myfile.txt") responce1, error := http.Get("https://example.com") если создали переменную и она не используется, то это ошибка а если так надо, то название переменн которое не должно использов ставьте _ ввод с клавиатуры package main import ( "bufio" "fmt" "os" ) func main() { fmt.Print("Enter text: ") reader := bufio.NewReader(os.Stdin) input, _ := reader.ReadString('\n') fmt.Println(input) } if 1 > 2 {} else if package main import ( "bufio" "fmt" "log" "os" ) func main() { fmt.Print("Enter text: ") reader := bufio.NewReader(os.Stdin) input, error1 := reader.ReadString('\n') if error1 != nil { log.Fatal(error1) } fmt.Println(input) }

golang book 3

узнать размер файла package main import ( "fmt" "log" "os" ) func main() { fileinfo, err := os.Stat("./fileSize.go") if err != nil { log.Fatal(err) } fmt.Println(fileinfo.Size()) } удали отступы в начале и в конце strings.TrimSpace(text) строки в числа цифры grade, err := strconv.ParseFloat(text, 64) 64 - это для float64 обьявленные переменные не смогут использоваться за пределам обьявленного тела условия или функции.. package main import ( "bufio" "fmt" "log" "os" "strconv" "strings" ) func main() { fmt.Print("Enter int: ") reader := bufio.NewReader(os.Stdin) input, err := reader.ReadString('\n') if err != nil { log.Fatal(err) } input = strings.TrimSpace(input) grade, err := strconv.ParseFloat(input, 64) if err != nil { log.Fatal(err) } var status string if grade > 60 { status = "ok" } else { status = "no ok" } fmt.Println("Ready: ", status) } Когда коротко обьявляем сразу 2 переменные и одно имя новое, а второе старое, то старое перезаписывается

golang book 4

рандом package main import ( "fmt" "math/rand" ) func main() { target := rand.Intn(100) + 1 fmt.Println(target) } rand.Intn(100) + 1 это чтоб от 1 до 100 включительно но рандом не рандом.. вот рандом package main import ( "fmt" "math/rand" "time" ) func main() { //seconds := time.Now().Unix() //rand.Seed(seconds) rand.Seed(time.Now().Unix()) target := rand.Intn(100) + 1 fmt.Println(target) } rand.Seed кушает только числа строку в число преобразовать в int input := strings.TrimSpace(input) value, err := strconv.Atoi(input) цикл for i:=4;i<7;i++ { fmt.Println(i) } // 4 5 6 i++ i-- -= += при вечном цикле ctrl с for еще используется вместо wile i:= 1 for i<3 { fmt.Println(i) i++ }

Копирование bash linux

cp readme readme2 OR cp readme Desktop/

Простой пример сокетов на php

Для работы с сокетами на PHP используется расширение "Sockets". Вот простейший пример клиентской части для подключения к серверу и отправки ему сообщения: ```php <?php // создание сокета $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // подключение к серверу $connect = socket_connect($socket, 'localhost', 8000); // отправка сообщения $msg = "Hello, server!"; socket_write($socket, $msg, strlen($msg)); // получение ответа от сервера $response = socket_read($socket, 4096); // закрытие соединения socket_close($socket); ?> ``` Серверная часть будет выглядеть примерно так: ```php <?php // создание сокета $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // привязка к адресу и порту socket_bind($socket, 'localhost', 8000); // ожидание подключения клиента socket_listen($socket); // обработка подключений while (true) { $client = socket_accept($socket); $msg = socket_read($client, 1024); $response = "Hello, client! I got your message: " . $msg; socket_write($client, $response, strlen($response)); socket_close($client); } // закрытие соединения socket_close($socket); ?> ``` Это только простейший пример работы с сокетами на PHP, в зависимости от задачи могут быть необходимы дополнительные настройки и функции.

Простой пример сокетов на js

JavaScript (JS) не поддерживает сокеты "из коробки", однако можно использовать API WebSocket для создания соединения между клиентом и сервером. Вот пример использования WebSocket на стороне клиента: ```javascript // создание сокета var socket = new WebSocket("ws://localhost:8000"); // отправка сообщения на сервер var msg = "Hello, server!"; socket.send(msg); // обработка ответа от сервера socket.onmessage = function(event) { var response = event.data; console.log("Ответ от сервера:", response); }; // закрытие соединения socket.onclose = function(event) { console.log("Соединение закрыто"); }; ``` Для работы необходимо запустить WebSocket сервер на указанном порту (в данном случае 8000) и обрабатывать входящие сообщения. На стороне сервера можно использовать, например, Node.js и библиотеку ws для создания WebSocket сервера. Вот пример: ```javascript const WebSocket = require('ws'); // создание сервера const server = new WebSocket.Server({ port: 8000 }); // обработка подключений server.on('connection', (socket) => { // обработка сообщения от клиента socket.on('message', (msg) => { console.log('Сообщение от клиента:', msg); // отправка ответа клиенту socket.send('Hello, client! I got your message'); }); }); ``` Это только простой пример, который можно доработать для своих задач.

Простой пример сокетов на golang

Пример использования сокетов на Golang: ```go package main import ( "fmt" "net" ) func main() { // создание сокета socket, err := net.Dial("tcp", "localhost:8000") if err != nil { fmt.Println("Ошибка при создании сокета:", err) return } defer socket.Close() // отправка сообщения msg := "Hello, server!" _, err = socket.Write([]byte(msg)) if err != nil { fmt.Println("Ошибка при отправке сообщения:", err) return } // получение ответа от сервера response := make([]byte, 1024) _, err = socket.Read(response) if err != nil { fmt.Println("Ошибка при чтении ответа:", err) return } fmt.Println("Ответ сервера:", string(response)) } ``` Серверная часть для принятия сообщений выглядит так: ```go package main import ( "fmt" "net" ) func main() { // создание сокета listener, err := net.Listen("tcp", ":8000") if err != nil { fmt.Println("Ошибка при создании сокета:", err) return } defer listener.Close() // обработка подключений for { conn, err := listener.Accept() if err != nil { fmt.Println("Ошибка при подключении клиента:", err) return } go handleRequest(conn) } } func handleRequest(conn net.Conn) { defer conn.Close() // чтение сообщения от клиента request := make([]byte, 1024) _, err := conn.Read(request) if err != nil { fmt.Println("Ошибка при чтении сообщения:", err) return } fmt.Println("Сообщение от клиента:", string(request)) // отправка ответа клиенту response := "Hello, client! I got your message" _, err = conn.Write([]byte(response)) if err != nil { fmt.Println("Ошибка при отправке ответа:", err) return } } ``` Это минимальный пример, который можно доработать для своих задач.

Зависимость зарплаты

Зарплата зависит от спроса, а не от сложности работы..

Игры

Serious Sam: The First Encounter

sql Перенос данных из другой таблицы этой же базы

sql достать с таблицы articles все id И добавить их в таблицу article_flag где есть столбцы: article_id и flag_id; в поле flag_id всегда ставим '3' Решение Предварительно сделай уникальным сочетание article_id и flag_id потом делай запрос INSERT IGNORE INTO article_flag (article_id, flag_id) SELECT id, '3' FROM articles;

rsync копирование

apt-get install rsync rsync -h Для каталогов rsync -a --progress откуда куда Вместо -r используем -a Там сохраняет свойства(время права) -v: подробный вывод. -r: рекурсивно копирует данные (но не сохраняет временные метки и разрешения при передаче данных). -a: режим архива, позволяет рекурсивно копировать файлы, а также сохраняет символические ссылки, права доступа к файлам, права владения пользователей и групп и временные метки. -z: сжатие данных файла. -h: human-readable, информация на выводе в формате, удобном для чтения. rsync -zah --progress откуда куда rsync -zvh --progress откуда куда rsync -zvh --progress file1 /var/www Копирование на удалённый rsync -a --progress откуда root@ip:/var/www Копирование с удалённого rsync -a --progress root@ip:/var/www/file1 /root/test Только изменения (заменяет файлы, если они изменены) rsync --update -av откуда куда Не трогать изменённые файлы rsync --ignore-existing -av откуда куда Ограничить по скорости rsync --bwlimit=100 -zah --progress откуда куда Для указания порта rsync -avz --bwlimit=500 -e "ssh -p 1234" /local_folder/ user@host:/remote_folder/

ssh подключиться

ssh root@IP -p PORT

Временная таблица sql TEMPORARY

При ошибке ERROR 1093 (HY000) at line 25: Table 'comments' is specified twice, both as a target for 'INSERT' and as a separate source for data CREATE TEMPORARY TABLE temp_comments AS SELECT id FROM comments WHERE created_at = '2015-03-09 02:22:57' LIMIT 1; DROP TEMPORARY TABLE temp_comments; ".(!empty($item['parent_date']) ? "CREATE TEMPORARY TABLE temp_comments AS SELECT id FROM comments WHERE created_at = '".$item['parent_date']."' LIMIT 1;" : "")." INSERT IGNORE INTO `comments` ( `group_type`, `group_id`, `model_type`, `model_id`, `group_ip`, ".(!empty($item['parent_date']) ? "`parent_id`, " : "")." `rating`, `score`, `body`, `created_at` ) VALUES ( 'App\Models\User', '1', 'App\Models\Article', (SELECT `id` FROM `articles` WHERE `url` = '".$item['article_url']."' LIMIT 1), '".$item['ip']."', ".(!empty($item['parent_date']) ? "(SELECT id FROM temp_comments), " : "")." '".$item['rating']."', '0', '".$item['text']."', '".$item['date']."' ); ".(!empty($item['parent_date']) ? "DROP TEMPORARY TABLE temp_comments;" : "")."

Ключи ssh быстро подключаться

на винде в cmd ssh-keygen.exe или на линуксе ssh-keygen То в папке пользователя создаётся .ssh На самом линуксе, к которому подключаться, открываем nano /root/.ssh/authorized_keys И на новой строки копируем наш ключ, который с .pub chmod 0600 /root/.ssh/authorized_keys Если при создании ключа, указывали его другое имя, то при логине указываем файл приват ключа ssh -i .\mykey root@ip -p PORT А если нет, то без ключа i ssh root@ip -p PORT https://youtu.be/-KOMKBtL_7I

linux bash установить ssh сервер

sudo apt install openssh-server sudo service ssh status

Учу python по книге игра шарик

from tkinter import * import random import time class Ball: def __init__(self, canvas, paddle, color): self.canvas = canvas self.paddle = paddle self.id = canvas.create_oval(10, 10, 25, 25, fill=color) self.canvas.move(self.id, 245, 100) starts = [-3, -2, -1, 1, 2, 3] random.shuffle(starts) self.x = starts[0] self.y = -3 self.canvas_height = self.canvas.winfo_height() self.canvas_width = self.canvas.winfo_width() self.hit_bottom = False def hit_paddle(self, pos): paddle_pos = self.canvas.coords(self.paddle.id) if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]: if pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]: return True return False def draw(self): self.canvas.move(self.id, self.x, self.y) pos = self.canvas.coords(self.id) if pos[1] <= 0: self.y = 3 if pos[3] >= self.canvas_height: self.hit_bottom = True if self.hit_paddle(pos) == True: self.y = -3 if pos[0] <= 0: self.x = 3 if pos[2] >= self.canvas_width: self.x = -3 class Paddle: def __init__(self, canvas, color): self.canvas = canvas self.id = canvas.create_rectangle(0, 0, 100, 10, fill=color) self.canvas.move(self.id, 200, 300) self.x = 0 self.canvas_width = self.canvas.winfo_width() self.canvas.bind_all('<KeyPress-Left>', self.turn_left) self.canvas.bind_all('<KeyPress-Right>', self.turn_right) def draw(self): self.canvas.move(self.id, self.x, 0) pos = self.canvas.coords(self.id) if pos[0] <= 0: self.x = 0 elif pos[2] >= self.canvas_width: self.x = 0 def turn_left(self, evt): self.x = -2 def turn_right(self, evt): self.x = 2 tk = Tk() tk.title("Игра") tk.resizable(0, 0) tk.wm_attributes("-topmost", 1) canvas = Canvas(tk, width=500, height=400, bd=0, highlightthickness=0) canvas.pack() tk.update() paddle = Paddle(canvas, 'blue') ball = Ball(canvas, paddle, 'red') while True: if ball.hit_bottom == False: ball.draw() paddle.draw() tk.update_idletasks() tk.update() time.sleep(0.01)

sql по боту выгрузку количество людей по городам

SELECT COUNT(*) AS kol, `city` FROM `users` GROUP BY `city` ORDER BY kol DESC

Изменить токен для подключения в Git

Не проверял, через 90 дней протестирую.. Для изменения токена для подключения в Git выполните команду: git config --global credential.helper store Затем выполните команду: git pull Введите свои новые учетные данные (имя пользователя и токен). Завершив работу с токеном, вы можете удалить его из кэша, выполните команду: git config --global --unset credential.helper

Нажать правую кнопку мыши на windows

Зажать Shift и нажать F10 Shift F10

Установить git на windows

https://git-scm.com/downloads https://www.youtube.com/watch?v=GsG5roSGha0

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

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

Примеры кода golang go example

WEB Учебник SQL MariaDB

sql версия version

SELECT VERSION(); SHOW PRIVILEGES; SHOW DATABASES; USE bd1; SHOW TABLES; Изменить разделители DELIMITER $$ ; DELIMITER ; $$

Сответствие консольных команд Windows и Linux

GO Golang install

In Android termux: apt update && apt upgrade && pkg install golang nano hello.go package main import "fmt" func main() { fmt.Println("Hello world") } go build ./hello.go ./hello OR go run ./hello.go In windows https://go.dev/doc/install

Bash Linux

// Переходы cd /var/www cd www cd .. // Что в папке ls // Где я pwd // Создать папку mkdir NAME // Удалить rm FOLDER -rf // Узнать размер вес размер папки (s этой папки, h норм формат) du -hs /home du -h file.txt https://itproffi.ru/kak-uznat-razmer-papki-v-linux/ // Инфа о файле stat file.txt // Доступное место быстрый просмотр df -h (df -i для узлов, записи расположений файлов) Архив sudo apt install zip unzip zip -r /path/to/files/* unzip archive.zip -d удалить файл из архива -r - рекурсивно обходить каталоги -0 - только архивировать, без сжатия -9 - наилучший степень сжатия -F - исправить zip файл -e - шифровать файлы zip -9 file.zip data-dump.sql

Dump SQL

mysqldump -u USER -p PASSWORD -h HOST DATABASE > data-dump.sql mysqldump -u USER -p PASSWORD DATABASE > data-dump.sql mysqldump -u USER -p PASSWORD DATABASE | gzip > `date +dump%Y%m%d_%H%M%S.sql.gz` mysql -u root -p PASSWORD CREATE DATABASE new_database; mysql -u USER -p PASSWORD DATABASE < data-dump.sql USE new_database; SHOW TABLES; https://www.oslogic.ru/knowledge/443/dampy-baz-dannyh-mysql-mysqldump/

Half Life 2 читы коды

во время иры намите ~ sv_cheats 1 включает возмоность читов impulse 82 машин impulse 83 лодка impulse 101 выдать вс ору через некоторое время перестат раотать noclip ходить через стены f4 вид от третьего god езсмертие sv_cheats 1; mp_friendlyfire 1; impulse 101; impulse 101; give item_healthkit; give item_healthkit; give item_healthkit; give item_healthkit; give item_healthkit; give item_healthkit; give item_healthkit; give item_ammo_crossbow; give item_ammo_crossbow; give item_ammo_crossbow; impulse 101; give item_ammo_crossbow; give item_ammo_crossbow; give item_ammo_crossbow; give item_healthkit; give item_healthkit; give item_healthkit; give item_healthkit; give item_battery; give item_battery; give item_battery; give item_battery;

sql битрикс ценные пользователи

SELECT `USER_ID`, COUNT(*) AS quantity, ROUND(SUM(PRICE)) AS summa FROM `b_sale_order` WHERE `LID` = 's1' AND `CANCELED` = 'N' AND `DATE_INSERT` > '2021-01-01' GROUP BY USER_ID ORDER BY summa DESC LIMIT 50

Психология дитя родитель взрослый

дитя - хочу, шутить играть, радоваться, счастье родитель - определяет правильность поступков дитя, совесть, запрещает, все осуждает взрослый - нужно целесообразно, исполнитель, так же оценщик ситуации, специалист по работе

termux разделить на несколько окон

pkg install tmux ctrl b % ctrl b "

публичнвй сайт на телефоне через 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

php разница в скорости работы двух знаков равно и трех

<?php $start = microtime(true); for ($i=0; $i < 1000; $i++) { $a = 5; $b = 5; if ($a == $b) { // какой-то код } } $end = microtime(true); $time1 = $end - $start; $start = microtime(true); for ($i=0; $i < 1000; $i++) { $a = 5; $b = 5; if ($a === $b) { // какой-то код } } $end = microtime(true); $time2 = $end - $start; echo "Время выполнения с двумя знаками равно: $time1 секунд\n"; echo "Время выполнения с тремя знаками равно: $time2 секунд\n";

Расслабляющий текст от ChatGPT

Закрой глаза и подумай о том, что для тебя действительно важно. Направь свое внимание на приятные мысли и думай о достижениях, которые ты получил. Попробуй почувствовать блаженство и восхищение от того, что достиг.

Смысл жизни во вселенной от ChatGPT

Смысл жизни во Вселенной остаётся загадкой для человечества. Некоторые говорят, что смыслом жизни является поиск и нахождение счастья. Другие думают, что целью жизни может быть достижение знаний и понимания того, что происходит в Вселенной. И другие предполагают, что наша цель в жизни может быть создание и развитие во Вселенной. В конце концов, существует множество разных подходов и мнений для ответа на вопрос о смысле жизни во Вселенной и никто не находит однозначного ответа.

termux install ssh client

pkg install openssh

Горячие клавиши регулирования яркости и звука на python

import keyboard #pip install keyboard import screen_brightness_control as sbc #pip install screen_brightness_control import os switch1 = 0 brightness_step = 4; def change_brightness(to_up): #global sbc brightness = (sbc.get_brightness())[0]; if to_up : brightness += brightness_step else : brightness -= brightness_step if brightness > 100 : brightness = 100 if brightness < 0 : brightness = 0 show("brightness " + str(brightness)) sbc.set_brightness(brightness) def function_up(): if switch1 == 0 : keyboard.send("volume up") show("volume up") return change_brightness(True) def function_down(): if switch1 == 0 : keyboard.send("volume down") show("volume down") return change_brightness(False) def function_switch(): global switch1 switch1 += 1 if switch1 == 2 : switch1 = 0 def show(text) : os.system('cls||clear') print(text) def start(): keyboard.add_hotkey("F10", function_up) keyboard.add_hotkey("F9", function_down) keyboard.add_hotkey("F8", function_switch) sbc.set_brightness(20) for number in range(20): keyboard.send("volume down") show("F8 - switch\nF10 - up\nF9 - down") text = input() if text == "1": start() start()

В фаерфокс на линуксе обновить страницу, сбросив кэш CTRL SHIFT R