unknown 3 өдөр өмнө
parent
commit
9d7d36886c

+ 16 - 45
.obsidian/workspace.json

@@ -20,37 +20,8 @@
               "icon": "lucide-file",
               "title": "allwinner 069 070"
             }
-          },
-          {
-            "id": "03665e6d2b1982f6",
-            "type": "leaf",
-            "state": {
-              "type": "markdown",
-              "state": {
-                "file": "English/words.md",
-                "mode": "source",
-                "source": false
-              },
-              "icon": "lucide-file",
-              "title": "words"
-            }
-          },
-          {
-            "id": "77e5b08d5fd40897",
-            "type": "leaf",
-            "state": {
-              "type": "markdown",
-              "state": {
-                "file": "English/Homework/Homework 8.md",
-                "mode": "source",
-                "source": false
-              },
-              "icon": "lucide-file",
-              "title": "Homework 8"
-            }
           }
-        ],
-        "currentTab": 2
+        ]
       }
     ],
     "direction": "vertical"
@@ -73,7 +44,7 @@
                 "autoReveal": false
               },
               "icon": "lucide-folder-closed",
-              "title": "Файловый менеджер"
+              "title": "Files"
             }
           },
           {
@@ -121,7 +92,7 @@
       }
     ],
     "direction": "horizontal",
-    "width": 236.5
+    "width": 200
   },
   "right": {
     "id": "cf92ccf43e96a53d",
@@ -173,24 +144,26 @@
   },
   "left-ribbon": {
     "hiddenItems": {
-      "switcher:Меню быстрого перехода": false,
-      "graph:Граф": false,
-      "canvas:Создать новый холст": false,
-      "command-palette:Открыть палитру команд": false,
-      "markdown-importer:Импорт Markdown-файлов": false
+      "switcher:Open quick switcher": false,
+      "graph:Open graph view": false,
+      "canvas:Create new canvas": false,
+      "command-palette:Open command palette": false,
+      "markdown-importer:Open format converter": false
     }
   },
-  "active": "c7584343712d3d31",
+  "active": "e6bea62ed1e6a115",
   "lastOpenFiles": [
+    "todo/Счета.md",
+    "ROTEK/allwinner 069 070.md",
+    "ASM/asm_x64.md",
+    "ASM/Компоновщик.md",
+    "ASM/gdb.md",
+    "hardcore web development/4. Linux.md",
+    "English/Homework/Homework 8.md",
     "English/Texts/Text 9.md",
     "English/words.md",
-    "English/Homework/Homework 8.md",
     "todo/Задачи по направлениям.md",
-    "ROTEK/allwinner 069 070.md",
     "Greenstar/ethernet stm32.md",
-    "ASM/linker.md",
-    "ASM/asm_x64.md",
-    "todo/Счета.md",
     "ROTEK/Artery testing.md",
     "ROTEK/Arbiter, artery.md",
     "ROTEK/bt67xx/common.md",
@@ -225,8 +198,6 @@
     "English/img/32-1.jpg",
     "linux/Tmux.md",
     "linux/linux common.md",
-    "ASM/gdb.md",
-    "linux/vim.md",
     "ASM",
     "STM32/Makefile_template.txt"
   ]

+ 30 - 1
ASM/asm_x64.md

@@ -176,4 +176,33 @@ _start:
 
 Команды ~={magenta}call и ret=~ используются для реализации механизма подпрограмм и функций. Команда call (вызвать) используется для для перехода из основной программы в подпрограмму, при этом сохраняя на стеке так называемый адрес возврата. Команда ret (вернуться) помещается в конец подпрограммы и осуществляет возврат в основную программу по этому адресу, который был ранее занесен в стек командой call.
 
-~={green}остановился на начале 17=~
+Порядок аргументов при вызове функции с помощью call в Linux x86-64 (ABI System V):
+
+1-ый параметр - %rdi
+2-ый параметр - %rsi
+3-ый параметр - %rdx
+4-ый параметр - %rcx
+5-ый параметр - %r8
+6-ый параметр - %r9
+
+В регистр %rax помещается количество используемых xmm-регистров. 
+
+~={yellow}Функция Write из динамической библиотеки языка C=~
+~={yellow}Параметры:=~
+1-ый параметр
+fd - file descriptor - целое положительное число, которое определят, куда будет производиться вывод. Для вывода на экран нужно строку отправить в выходной поток. Дескриптор выходного потока равен 1.
+
+2-ой параметр
+buf - buffer, адрес первого байта выводимых данных (адрес начала строки, которую нужно вывести).
+
+3-ий параметр
+count - количество выводимых байтов (символов)
+
+
+
+Остальные аргументы через стек
+
+
+
+
+~={green}остановился на начале 20=~

+ 0 - 0
ASM/linker.md


+ 47 - 0
ASM/Компоновщик.md

@@ -0,0 +1,47 @@
+~={green}Компоновщик LD=~
+
+После ассемблирования в полученном объектном файлу вместо реальных адресов меток находятся нулевые адреса. Этой задачей занимается компоновщик.
+
+~={yellow}Задачи компоновщика:=~
+
+- Проставление адресов на место меток. В пределах одного или нескольких файлов.
+- Установка точки входа в программу. Если нет точки входа по умолчанию, то будет выбран адрес 401000.
+```bash
+# Точкой входа по умолчанию для компоновщика ld является метка:
+_start:
+
+# Для установки другой точки входа нужно при сборке программы указать точку в параметре -e
+$ ld test.o -o test.exe -e my_entry_point
+```
+- Подгрузка статических библиотек.
+- Подгрузка динамических библиотек.
+
+~={green}Компоновщик GCC=~
+
+~={yellow}Особенности компоновщика GCC=~
+- Использует "под капотом" компоновщик ld.
+- Компоновщик gcc создает каркас программы, в котором уже есть функция start. В этой функции strart происходят некоторые подготовительные действия, а также вызов функции main, которая в дальнейшем играет роль основной. В конце функция main должна сохранить в %rax статус завершения программы и осуществить возврат в функцию start. Статус успешного завершения программы - это число 0.
+- Компоновщик gcc автоматически подгружает файлы динамических библиотек языка Си.
+
+~={yellow}Что примерно делает компоновщик GCC=~
+```asm
+	.file "base.s"
+	.text
+	.globl _start
+_start:
+	//...
+	//...
+	//...
+	call main
+	//...
+	//...
+	movq %rax, %rdi
+	movq $60, %rax
+	syscall
+```
+
+~={yellow}Важное=~
+Компоновщик gcc по умолчанию создает позиционно-независимый исполняемый файл (PIE - Position Independent Executable). Для того, чтобы отменить такое поведение, нужно использовать при компоновке параметр -no-pie.
+```bash
+$ gcc main.o -o main.exe -no-pie
+```

+ 52 - 0
hardcore web development/11. SQL/quiz_1.sql

@@ -23,3 +23,55 @@ select * from (values
     ('The Dark Knight', 9.1, 2008),
     ('Inception', 8.8, 2010)
 ) t(movie, imdb_rating, year);
+
+
+-- -----------------------------------------------------------------
+-- 11.18 Фильтрация данных
+
+table family;
+
+select * from family where family_name='Дроздовые';
+
+select * from family where family_name='Дроздовые' or family_name='Синицевые';
+
+select * from family where family_name in ('Дроздовые', 'Синицевые');
+
+select * from family where family_name like '%а%'; 
+
+select * from family where family_name like '%а%' or family_name like '%с%';
+
+select * from family where family_name ilike '%а%';
+
+
+-- -----------------------------------------------------------------
+-- 11.19 Особое значение NULL, coalesce
+
+select family_id, family_name, coalesce(description, 'не заполнено') as description from family;
+
+select * from family where description is null;
+
+select * from family where description is null or family_name like '%Д%';
+
+
+-- -----------------------------------------------------------------
+-- 11.20 Сортировка данных
+
+select * from family order by family_id;
+
+select * from family order by description nulls first;
+
+select * from family order by sescription nulls last;
+
+select family_name from family where family_name like 'Д%' order by family_name; 
+
+-- -----------------------------------------------------------------
+-- 11.21 Ограничение количества результатов запроса
+
+table species;
+
+select * from species order by species_name, description
+limit 10 offset 10;
+
+select species_id, species_name from species where primary_color ilike '%бел%'
+order by species_name
+limit 5;

+ 155 - 1
hardcore web development/11. SQL/room_1.sql

@@ -108,11 +108,165 @@ select t.name from (
 values (1, 'Алексей'), (2, 'Петр'), (3, 'Иннокентий')
 ) as t(id, name);
 
+-- -----------------------------------------------------------------
+-- Фильтрация данных
+
+select * from author where author_id=1;
+
+-- AND
+select * from author where name='Михаил Шолохов';
+select * from author where name='Михаил Шолохов' and author_id=200;
+
+-- OR
+select * from author where name='Михаил Шолохов' or author_id=200;
+
+-- NOT
+select * from author where not author_id = 1;
+select * from author where author_id != 1;
+select * from author where author_id <> 1;
+
+-- Compare
+select * from author where author_id <= 2;
+
+-- Between
+select * from author where author_id between 1 and 10;
+
+-- IN
+select * from author where author_id in (1, 2, 3, 4, 5);
+
+-- Выборка авторов у которых есть книга или книги
+select * from author where author_id in (
+	select author_id from book
+);
+
+select * from author where author_id in (
+	select author_id from book where name='Тихий Дон'
+);
+
+-- LIKE (шаблоны)
+-- % - нуль или больше символов
+-- _ - ровно один символ
+
+select * from author where name like '%Шолохов%'
+
+-- ILIKE - поиск по шаблону, не обращает внимание на регистр символов
+select * from author where name ilike '%михаил%'
+select * from author where name ilike '%миХАил%'
+
+-- ger exp (регуляные выражения)
+-- ^ - начало строки
+-- \w+ - любой алфивитно-цифровой символ, где + - это один или более символов
+-- \W+ - любой не алфивитно-цифровой символ
+-- $ - конец строки
+
+-- найти название книги, которое состоит из двух слов
+select name from book where name ~ '^\w+\W+\w+$';
+
+
+-- -----------------------------------------------------------------
+-- 11.19 Особое значение NULL, coalesce
+-- NULL при сравнении с чем-либо дает NULL
+
+drop table if exists author_without_checks;
+table author_without_checks;
+-- Создадим временную таблицу
+create temp table author_without_checks (
+	author_id bigint generated always as identity primary key,
+	name varchar(150) not null,
+	description text
+);
+
+-- и вставим запись
+insert into author_without_checks (name) values (
+	'какой-то автор'
+);
+
+-- проверка на NULL
+select * from author_without_checks where description is null;
+
+-- coalesce - подствит нужное значение если значение NULL
+select 
+	author_id,
+	name,
+	coalesce(description, 'не заполнено') as description
+from author_without_checks;
+
+-- обновление данных
+update author_without_checks set description='привет' where author_id=1;
+
+
+-- -----------------------------------------------------------------
+-- 11.20 Сортировка данных
+
+select * from author order by name;
+
+-- по возрастанию (так происходит по умолчанию)
+select * from author order by id asc;
+
+-- по убыванию
+select * from author order by id desc;
+
+-- можно указать номер колонки для сортировки. Но это лучше не использовать.
+select author_id, name, description from author order by 1;
+
+-- можно указать куда вставлять NULL. В данном случае поместить в конц выборки.
+select author_id, name, description from author order by 3 nulls last;
+
+-- сортировка по нескольким колонкам
+
+-- создадим временную таблицу
+drop table if exists author_tmp;
+table author_tmp;
+
+create temp table author_tmp (
+	author_id bigint generated always as identity primary key,
+	first_name varchar(150) not null,
+	last_name varchar(150) not null
+);
+
+insert into author_tmp (first_name, last_name) values
+   ('Михаил', 'Шишкин'),
+   ('Михаил', 'Веллер'),
+   ('Михаил', 'Шолохов'),
+   ('Михаил', 'Зощенко'),
+   ('Михаил', 'Булгаков'),
+   ('Александр', 'Беляев'),
+   ('Александр', 'Пушкин'),
+   ('Лусиану', 'Рамальо');
+
+select * from author_tmp order by first_name;
+select * from author_tmp order by first_name, last_name;
+select * from author_tmp order by first_name, last_name desc;
+select * from author_tmp order by first_name desc, last_name desc;
+
+-- Можно сортировать и виртуальные таблицы
+
+select * from (values ('Яблоко'), ('Апельсин'), ('Банан'));
+
+-- сортировка просто по номеру колонки
+select * from (values ('Яблоко'), ('Апельсин'), ('Банан')) t order by 1;
+
+-- даём колонке имя, но сортировка по номеру колонки
+select * from (values ('Яблоко'), ('Апельсин'), ('Банан')) t(fruit) order by 1;
+
+
+-- -----------------------------------------------------------------
+-- 11.21 Ограничение количества результатов запроса
+
+-- count - возвращает количество записей в таблице
+select count(*) from book;
+
+-- выборка первых 10и записей
+select book_id, name, author_id from book order by name limit 10;
+
+-- выборка следующих 10 записей
+select book_id, name, author_id from book order by name limit 10 offset 10;
+
 
 -- -----------------------------------------------------------------
 -- Заметки
 
--- Остановился на 16 главе 
+-- Остановился на 21 главе 
 
 -- -----------------------------------------------------------------
 -- Мусор

+ 5 - 5
todo/Счета.md

@@ -1,10 +1,10 @@
 # 2025
 #### <font color = "MediumSeaGreen">Июнь</font>
 ##### <font color = "#1D8571">Коммунальные услуги</font>
-- [ ] Широкая электричество ()
-- [ ] Широкая платежка ()
-- [ ] Подрезково ()
-- [ ] Нина электричество + TKO ()
+- [x] Широкая электричество ()
+- [x] Широкая платежка ()
+- [x] Подрезково ()
+- [x] Нина электричество + TKO (986)
 
 ##### <font color = "#1D8571">Передача показаний с 15-ого числа</font>
 - [ ] Широкая вода. хол , гор 
@@ -14,7 +14,7 @@
 - [ ] Планерная Нина электричество: 
 - [ ] Планерная Батя электричество: 
 ##### <font color = "#1D8571">Дополнительно</font>
-- [ ] Отдать Нине ()
+- [ ] Отдать Нине (19000)
 - [x] Домашний интернет (860)
 - [ ] Сотовый телефон ()
 - [ ] Хостинг