diff --git a/config.toml b/config.toml index c0915ab..8a374a9 100644 --- a/config.toml +++ b/config.toml @@ -7,7 +7,8 @@ compile_sass = true theme = "terminimal" # Whether to build a search index to be used later on by a JavaScript library -build_search_index = true +build_search_index = false +default_language = "ru" taxonomies = [ {name = "tags"}, @@ -20,33 +21,42 @@ highlight_code = true highlight_theme = "kronuz" [extra] -accent_color = "red" -background_color = "dark" - -logo_text = "Ortem's kennel" +# One of: blue, green, orange, pink, red. +# Defaults to blue. +# Append -light for light themes, e.g. blue-light +# Or append -auto, e.g. blue-auto +accent_color = "blue" + +# One of: blue, dark, green, orange, pink, red, light, auto +# Enabling dark background will also modify primary font color to be darker. +# Defaults to accent color (or, if not accent color specified, to blue). +background_color = "red" + +logo_text = "Конура Ортёма" +logo_home_link = "/home" #author = "Artёm Sidorenko" -copyright_html = "© 2022 Artёm Sidorenko
fuck copyrights btw" +copyright_html = "Artёm Sidorenko 🄯 2023-2022
fuck copyrights btw" menu_items = [ - {name = "blog", url = "$BASE_URL/blog"}, - {name = "about me", url = "$BASE_URL/about"}, - + {name = "блог", url = "$BASE_URL/blog"}, + {name = "обо мне", url = "$BASE_URL/about"}, + # set newtab to true to make the link open in new tab #{name = "github", url = "https://github.com/plazmoid", newtab = true}, - - {name = "projects", url = "$BASE_URL/projects"}, - {name = "links", url = "$BASE_URL/links"}, - {name = "tags", url = "$BASE_URL/tags"}, - + + {name = "проекты", url = "$BASE_URL/projects"}, + {name = "ссылки", url = "$BASE_URL/links"}, + {name = "теги", url = "$BASE_URL/tags"}, + # just a placeholder to satisfy zola {name = "", url = "$BASE_URL/"}, ] -[languages.ru] +[languages.en] taxonomies = [ - {name = "теги"}, + {name = "tags"}, ] -[languages.ru.translations] -logo_text = "Ортёмья конура" \ No newline at end of file +[languages.en.translations] +logo_text = "Ortem's kennel" \ No newline at end of file diff --git a/content/_index.md b/content/_index.md index adbe91b..afde156 100644 --- a/content/_index.md +++ b/content/_index.md @@ -1,3 +1,5 @@ +++ redirect_to = "home" +title = "Приветствую" +++ +Вы находитесь на самом ортёмном сайте во всей сети. Используйте меню для навигации. \ No newline at end of file diff --git a/content/about/cv.md b/content/about/cv.md deleted file mode 100644 index 59a2da9..0000000 --- a/content/about/cv.md +++ /dev/null @@ -1,4 +0,0 @@ -+++ -title = "Curriculum vitae" -+++ -CV placeholder \ No newline at end of file diff --git a/content/about/cv/calc.jpg b/content/about/cv/calc.jpg new file mode 100644 index 0000000..ff5a8b5 Binary files /dev/null and b/content/about/cv/calc.jpg differ diff --git a/content/about/cv/calc1.jpg b/content/about/cv/calc1.jpg new file mode 100644 index 0000000..2cddc34 Binary files /dev/null and b/content/about/cv/calc1.jpg differ diff --git a/content/about/cv/index.md b/content/about/cv/index.md new file mode 100644 index 0000000..a58fa3b --- /dev/null +++ b/content/about/cv/index.md @@ -0,0 +1,89 @@ ++++ +title = "Резюме" ++++ +10 лет: первая книжка по программированию на Visual Basic. Первая графическая угадайка и огонь в глазах от рабочей программы с ползнуком загрузки. + +12-16 лет: после появления диска по сталкером появилось и желание расколупать его исходники и сделать весёлые штуки на потеху себе и друзьям-одноклассникам. +Так в нём появилась портальная пушка, гравитационная граната, полёты на военном вертолёте и собственные карты для мультиплеера. + +![stalker1](mmap1.jpg) + +![stalker2](mmap2.jpg) + +![stalker3](otf.jpg) + +14-18 лет: Майнкрафт, электроцепи на двоичной логике из красного камня, C418 на фоне. +Из большого родился 6-разрядный калькулятор со сложением и вычитанием вплоть до отрицательных чисел. + +![calc](calc.jpg) + +![calc1](calc1.jpg) + +14-20 лет: участие в различных олимпиадах по программированию/CTF: УрКОП, ICPC, QCTF. +Без выдающихся результатов (но бесплатные пиццы того стоили). + +17-18 лет: поступление в Уральский федеральный университет на информационную безопасность. +Активное изучение Python и использование его во многих местах: от курсовых до первых фрилансерских задач. +Осознание неверности выбранного направления после первого курса: +перекладывание бумажек и расчёты цепей не могли совмещаться с активной программистской деятельностью. +Перевод на компьютерную безопасность. + +21 год: очередное осознание неверности выбранного направления, уход из университета на 5 курсе, полное погружение в работу. + +22 года: в 2020 открыл для себя Rust и решил перекатываться на него, как на самый идеальный для меня язык. + +За время обучения в университете и самоучества наработал себе неплохой фундамент: +алгоритмы, структуры данных, О-нотация, сети на уровне CCNA, дискретка, криптография, опыт работы на нескольких языках программирования/разметки/etc: +Python, Java, Javascript, MySQL, HTML, CSS, C, TASM. + +За время работы на разные компании профессионально развивался в сфере бэкенд-разработки изначально на Python, впоследствии (и сейчас) на Rust. + +## Salary transparency +- kwork.ru +Время работы: Апрель 2017 — Январь 2018 +Должность: Junior python programmer +Обязанности: Фриланс на kwork.ru +З/п: 500-15000 ₽ / проект + +- Точка +Время работы: Июнь 2018 — Сентябрь 2018 +Должность: Junior python programmer +Обязанности: Разработка автотестов для мобильного приложения банка с использованием python и appium +З/п: 23000 ₽ + +- Крона-КС +Время работы: Июнь 2019 — Сентябрь 2019 +Должность: Программист Python +Обязанности: Разработка SAAS-сервиса Retailiqa, рефакторинг кода на Python (django, mongo) и Javascript +З/п: 30000 ₽ + +- Инанго-СВ +Время работы: Сентябрь 2019 — Декабрь 2019 +Должность: Программист С +Обязанности: Разработка и рефакторинг прошивок для Intel Puma 6/7 на языке Си/С++ +З/п: 35000 ₽ + +- Cloudlinux +Время работы: Май 2020 — Июнь 2021 +Должность: Программист Python +Обязанности: Разработка клиентской части антивируса Imunify360 и различных внутренних инструментов на Python. Покрытие кода юнит-, функциональными и интеграционными тестами. Написание плейбуков для Ansible. +З/п: $1000 + +- Waves.Exchange +Время работы: Август 2021 — Май 2023 +Должность: Rust-программист +Обязанности: Разработка, поддержка, рефакторинг микросервисов бэкенда биржи waves.exchange на языке Rust. +Переписывание легаси-кода с Typescript, Scala и Go на Rust. +Проектирование архитектуры и создание новых микросервисов как в одиночку, так и в команде. +Документирование и покрытие кода тестами. +Проведение код-ревью коллег. +Создание внешних опенсурс-библиотек для разделяемого использования в конечных сервисах и других отделах компании. +Исследование и участие в обсуждении новых фич для оптимизации кода. +Участие в расследовании инцидентов на продакшене. +З/п: $2000 + +- Сбербанк-Технологии +Время работы: 11 июля 2023 - н.в. +Должность: Rust-программист +Обязанности: Разработка личного кабинета для клиентов Platform V. +З/п: :) diff --git a/content/about/cv/mmap1.jpg b/content/about/cv/mmap1.jpg new file mode 100644 index 0000000..9c8c5dd Binary files /dev/null and b/content/about/cv/mmap1.jpg differ diff --git a/content/about/cv/mmap2.jpg b/content/about/cv/mmap2.jpg new file mode 100644 index 0000000..cccba7e Binary files /dev/null and b/content/about/cv/mmap2.jpg differ diff --git a/content/about/cv/otf.jpg b/content/about/cv/otf.jpg new file mode 100644 index 0000000..7033cd9 Binary files /dev/null and b/content/about/cv/otf.jpg differ diff --git a/content/about/index.md b/content/about/index.md index 31d6bec..18517f5 100644 --- a/content/about/index.md +++ b/content/about/index.md @@ -1,7 +1,7 @@ +++ -title = "About me" +title = "Обо мне" +++ -Are you an employer and looking for a Middle Rust Developer? Don't hesitate to check out my [CV](/about/cv) and [portfolio](/projects)! +Вы HR и находитесь в поисках Middle Rust-разработчика? Предлагаю заглянуть в моё [портфолио](/projects) и [резюме](/about/cv)! -Not enough? You wanna dig into my mind [deeper](/about/mind)? \ No newline at end of file +А ещё можно посмотреть [вглубь меня](/about/mind) \ No newline at end of file diff --git a/content/blog/rust-quiz-1.md b/content/blog/rust-quiz-1.md new file mode 100644 index 0000000..289064e --- /dev/null +++ b/content/blog/rust-quiz-1.md @@ -0,0 +1,88 @@ ++++ +title = "Расттест 1" +date = "2022-08-18" + +[taxonomies] +tags = ["rust"] ++++ + +### Какой тип имеет переменная `result`? +```rust +fn count_uppercase(s: &str) -> usize { + let result = { + let upper = s.chars().filter(|c| c.is_uppercase()).collect::(); + return upper.len(); + }; +} +``` + +
Ответ + +`result` имеет тип `!` (never type/никогдатый тип). +В `result` записывается результат выполнения блока инструкций в фигурных скобочках. +Блок `{ ... }` всегда возвращает значение, но как быть, если мы натыкаемся на `return`, +прерывающий поток выполнения программы и возвращающий значение из **функции**, а не из блока? +Для этого в раст завезли служебный тип `!`, показывающий, что тип данной переменной никогда не будет присвоен. + +Если бы мы переписали функцию следующим образом: +```rust +fn count_uppercase(s: &str) -> usize { + let result = { + let upper = s.chars().filter(|c| c.is_uppercase()).collect::(); + upper.len() + }; + return result +} +``` +то `result` бы имел верный тип `usize`. + +[Почитать ещё](https://doc.rust-lang.org/book/ch19-04-advanced-types.html#the-never-type-that-never-returns) + +P.S.: обычно в расте принято опускать `return` и писать вместо него возвращаемое значение без `;`. +Это трактуется как возврат значения из текущего блока (в том числе функции) + +
+
+ +### Ограничен ли дженерик-тип `T` какими-либо трейтами? +```rust +pub fn drop(_x: T) { } +``` + +
Ответ + +Да, по умолчанию любые дженерики имеют ограничение `T: Sized`. +Этот трейт реализован для всех типов, размер которых известен на момент компиляции. + +Для отмены ограничения используется следующий синтаксис: +```rust +pub fn drop(_x: T) { } +``` +означающий, что функция может принимать безразмерные типы (DST), такие как `dyn Trait`, `[u8]`, `str` и т.д. + +
+
+ +### Есть ли отличия между следующими кусками кода? +```rust +const GLOBAL_MUTEX: Mutex = Mutex::new(0); +``` +и +```rust +static GLOBAL_MUTEX: Mutex = Mutex::new(0); +``` + +
Ответ + +`const` клонирует значение константы во все места её использования. +В результате вместо изменения глобального мьютекса мы получаем несколько клонированных мьютексов и часы дебага. + +В случае со `static` программа действительно создаёт один глобальный мьютекс, который можно изменять из разных потоков. + +Это известная проблема, о которой не сигнализирует `rustc`, +поэтому будет полезно дополнительно использовать `clippy` в вашем проекте. Он не только отловит неверное использование констант, +но привьёт вам чувство прекрасного растового кода. +[Почитать ещё](https://rust-lang.github.io/rust-clippy/master/index.html#/declare_interior_mutable_const) + +
+
\ No newline at end of file diff --git a/content/blog/rust-tricky-quiz.md b/content/blog/rust-tricky-quiz.md deleted file mode 100644 index bca1ed3..0000000 --- a/content/blog/rust-tricky-quiz.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -title = "Tricky questions for any rust interview" -draft = true -date = "2022-08-18" - -[taxonomies] -tags = ["rust"] -+++ - -Which type has variable `result`? -```rust -fn count_uppercase(s: &str) -> usize { - let result = { - let upper = s.chars().filter(|c| c.is_uppercase()).collect::(); - return upper.len(); - }; -} -``` - -
Answer - -`result` has '!' type or 'never type'. . [Read more](https://doc.rust-lang.org/book/ch19-04-advanced-types.html#the-never-type-that-never-returns) - -
\ No newline at end of file diff --git a/content/home.en.md b/content/home.en.md new file mode 100644 index 0000000..9082518 --- /dev/null +++ b/content/home.en.md @@ -0,0 +1,4 @@ ++++ +title = "Welcome, stranger" ++++ +You're on ortem's website! Use top menu to navigate. \ No newline at end of file diff --git a/content/home.md b/content/home.md index 9082518..5327219 100644 --- a/content/home.md +++ b/content/home.md @@ -1,4 +1,4 @@ +++ -title = "Welcome, stranger" +title = "Приветствую" +++ -You're on ortem's website! Use top menu to navigate. \ No newline at end of file +Вы находитесь на самом ортёмном сайте во всей сети. Используйте меню для навигации. \ No newline at end of file diff --git a/content/home.ru.md b/content/home.ru.md deleted file mode 100644 index 5327219..0000000 --- a/content/home.ru.md +++ /dev/null @@ -1,4 +0,0 @@ -+++ -title = "Приветствую" -+++ -Вы находитесь на самом ортёмном сайте во всей сети. Используйте меню для навигации. \ No newline at end of file diff --git a/content/projects.md b/content/projects.md index 8da7250..e080259 100644 --- a/content/projects.md +++ b/content/projects.md @@ -1,15 +1,19 @@ +++ -title = "My pet projects" +title = "Примеры моего кода. Пет-проекты (🐕) и не очень." +++ -* [Source code of ortem.xyz](https://git.ortem.xyz/root/ortem.xyz) +* [unki](https://git.ortem.xyz/root/unki): домашний RAT -* [Yet another one brainfuck interpreter](https://github.com/plazmoid/brainfuck-rust) +* [Примеры реального продакшен-кода](https://github.com/wavesplatform/blockchain-postgres-sync/pulls?q=is%3Apr+author%3Aplazmoid) -* [unki](https://git.ortem.xyz/root/unki): cross-platform remote admin tool for not enough smart house +* [Исходники ortem.xyz](https://git.ortem.xyz/root/ortem.xyz) -* [sockser](https://git.ortem.xyz/root/sockser): small program to establish and maintain SOCKS5-tunnel via ssh client +* [Очередной brainfuck-интерпретатор](https://github.com/plazmoid/brainfuck-rust) -* [teeworlds](https://github.com/plazmoid/teeworlds): rough clone of original [game](https://www.teeworlds.com/) written in python+pygame +* [sockser](https://git.ortem.xyz/root/sockser): +демон для установки и поддержания SOCKS5-туннеля через ssh-соединение -* [bind-it](https://github.com/plazmoid/bind_it): small nightly-rust crate that allows to write `let n: impl Trait = 1;` \ No newline at end of file +* [teeworlds](https://github.com/plazmoid/teeworlds): грубый клон [игры](https://www.teeworlds.com/) на python+pygame + +* [bind-it](https://github.com/plazmoid/bind_it): +небольшой крейт для раста (nightly), позволяющий писать `let n: impl Trait = 1;` \ No newline at end of file diff --git a/sass/custom.scss b/sass/custom.scss new file mode 100644 index 0000000..5f31831 --- /dev/null +++ b/sass/custom.scss @@ -0,0 +1,16 @@ +details { + summary:hover { + cursor: pointer; + } +} + +body { + background: url("cartoon-computer-SEL.jpg") top right no-repeat; + background-attachment: fixed; + background-size: 100%; +} + +.container { + background-color: black; + opacity: 0.93; +} \ No newline at end of file diff --git a/static/cartoon-computer-SEL.jpg b/static/cartoon-computer-SEL.jpg new file mode 100644 index 0000000..c31f623 Binary files /dev/null and b/static/cartoon-computer-SEL.jpg differ diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..2bec0ef --- /dev/null +++ b/templates/index.html @@ -0,0 +1,124 @@ +{% import "macros/date.html" as date_macros -%} +{% import "macros/head.html" as head_macros -%} +{% import "macros/menu.html" as menu_macros -%} +{% import "macros/post.html" as post_macros -%} + + + + + + {%- block title %}{{ config.title }}{% endblock title -%} + {{ head_macros::head(config=config) }} + + {%- if config.generate_rss %} + + {% endif -%} + + {%- if config.extra.favicon %} + + {% endif -%} + + + + {%- block extra_head %} + {% endblock extra_head -%} + + + +
+ {% block header %} +
+
+ +
+ + {% block header_menu %} + {{ menu_macros::menu(config=config, current_path=current_path) }} + {% endblock header_menu %} +
+ {% endblock header %} + +
+ {% block content %} +
+ {%- if paginator %} + {%- set show_pages = paginator.pages -%} + {% else %} + {%- set show_pages = section.pages -%} + {% endif -%} + + {%- for page in show_pages %} +
+ {{ post_macros::header(page=page) }} + {{ post_macros::content(page=page, summary=true) }} +
+ {% endfor -%} + +
+ {% endblock content %} +
+ + {% block footer %} +
+ +
+ {% endblock footer %} + +
+ + + \ No newline at end of file diff --git a/templates/section.html b/templates/section.html index b535a0f..a38c408 100644 --- a/templates/section.html +++ b/templates/section.html @@ -2,6 +2,7 @@ {% block content %} {% for post in section.pages %} -

{{ post.title }}

+

{{ post.title }}

+ {{ post.date }} {% endfor %} {% endblock content %} \ No newline at end of file diff --git a/themes/terminimal b/themes/terminimal new file mode 160000 index 0000000..0cc4235 --- /dev/null +++ b/themes/terminimal @@ -0,0 +1 @@ +Subproject commit 0cc423545a63a9bd6ea6fc66068d03625d574876