8 Commits

Author SHA1 Message Date
1c70581783 Added code example for python-speedup. 2025-09-12 18:11:19 +02:00
6309b0bffa Added speedup project code. 2025-09-12 13:38:13 +02:00
348a288fa3 Reverted shit.
All checks were successful
Release / docker_build (push) Successful in 1m28s
Release / deploy_helm (push) Successful in 16s
2025-08-12 18:55:56 +02:00
2418f99cc5 Added new domain.
All checks were successful
Release / docker_build (push) Successful in 1m3s
Release / deploy_helm (push) Successful in 16s
2025-08-12 18:47:43 +02:00
d4b7226871 Removed shit.
All checks were successful
Release / docker_build (push) Successful in 1m0s
Release / deploy_helm (push) Successful in 10s
2025-07-25 19:27:20 +02:00
5f4684d0cd Updated zola.
All checks were successful
Release / docker_build (push) Successful in 37s
Release / deploy_helm (push) Successful in 12s
2025-07-25 19:17:20 +02:00
54dd3042f8 Fixed code styles and preview images.
All checks were successful
Release / docker_build (push) Successful in 38s
Release / deploy_helm (push) Successful in 13s
2025-07-25 19:06:54 +02:00
8eaba16410 Fixed styles for code.
All checks were successful
Release / docker_build (push) Successful in 38s
Release / deploy_helm (push) Successful in 13s
2025-07-25 17:36:15 +02:00
13 changed files with 263 additions and 58 deletions

View File

@ -1,4 +1,4 @@
FROM ghcr.io/getzola/zola:v0.17.1 AS zola
FROM ghcr.io/getzola/zola:v0.21.0 AS zola
COPY . /project
WORKDIR /project

View File

@ -3,7 +3,7 @@ title = "s3rius blog"
base_url = "https://s3rius.blog"
theme = "hermit_zola"
compile_sass = true
minify_html = true
minify_html = false
build_search_index = true
generate_sitemap = true
@ -16,6 +16,7 @@ render_emojis = true
smart_punctuation = true
[extra]
preview_image = "preview.png"
home_subtitle = "Notes on writing unmaintainable software"
footer_copyright = ' &#183; <a href="https://creativecommons.org/licenses/by-nc/4.0/" target="_blank" rel="noopener">CC BY-NC 4.0</a>'
@ -32,11 +33,6 @@ hermit_social = [
]
[extra.highlightjs]
enable = true
clipboard = true
theme = "https://unpkg.com/nord-highlightjs@0.1.0/dist/nord.css"
[extra.author]
name = "Pavel Kirilin"
email = "s3rius@le-memese.com"

View File

@ -2,8 +2,6 @@
title = "About Me"
+++
# Who Am I?
My name is Pavel Kirilin, and my nickname is [@s3rius](https://github.com/s3rius). I am a backend developer with diverse experience. Currently, I hold the position of CTO at [Intree](https://www.intree.com/).
In my free time, I enjoy experimenting with various technologies and building new projects. You can find some of my work on [GitHub](https://github.com/s3rius) or on my self-hosted Gitea instance at [gitea.le-memese.com](https://gitea.le-memese.com/s3rius).

View File

@ -4,9 +4,7 @@ weight = 0
date = "2025-07-22"
[extra]
image = "posts/kube-intro/preview.png"
image_width = 1200
image_height = 720
preview_image = "posts/kube-intro/preview.png"
+++
![Intro](./imgs/intro.png)

View File

@ -0,0 +1,65 @@
---
Language: Cpp
BasedOnStyle: LLVM
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveMacros: true
AlignConsecutiveAssignments: true
AlignEscapedNewlines: Right
AlignOperands: false
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: true
AllowAllConstructorInitializersOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: true
AllowShortCaseLabelsOnASingleLine: true
AllowShortFunctionsOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: Never
AllowShortLambdasOnASingleLine: All
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: Yes
BreakBeforeBraces: Attach
BreakBeforeTernaryOperators: false
BreakConstructorInitializers: AfterColon
ColumnLimit: 180
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: false
IncludeBlocks: Preserve
IndentCaseLabels: true
IndentWidth: 4
PointerAlignment: Left
ReflowComments: false
SortIncludes: false
SortUsingDeclarations: false
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInCStyleCastParentheses: false
SpacesInContainerLiterals: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Auto
TabWidth: 4
UseTab: Never
AllowShortEnumsOnASingleLine: false
BraceWrapping:
AfterEnum: false
AlignConsecutiveDeclarations: AcrossEmptyLines
NamespaceIndentation: All

View File

@ -0,0 +1,25 @@
# Created by https://gitignore.org
# CMake.gitignore
*.log
.cache/
*.so
CMakeLists.txt.user
CMakeCache.txt
CMakeFiles
CMakeScripts
Testing
Makefile
cmake_install.cmake
install_manifest.txt
compile_commands.json
CTestTestfile.cmake
_deps
CMakeUserPresets.json
# CLion
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#cmake-build-*

View File

@ -0,0 +1,34 @@
cmake_minimum_required(VERSION 3.30)
project(
pyspeed
VERSION 0.1.0
DESCRIPTION "C++ extension for Python speedup"
LANGUAGES CXX
)
file(GLOB_RECURSE SRCFILES "src/*.cpp")
set(CMAKE_EXPORT_COMPILE_COMMANDS true)
set(CMAKE_EXECUTABLE_ENABLE_EXPORTS TRUE)
set(CMAKE_CXX_STANDARD 23)
add_compile_options(
-Wall
-Wextra
-Wpedantic
-Wno-unused-parameter
-Wno-unused-value
-Wno-missing-field-initializers
-Wno-gnu-zero-variadic-macro-arguments
-Wno-narrowing
-Wno-pointer-arith
-Wno-clobbered
-fmacro-prefix-map=${CMAKE_SOURCE_DIR}/=
)
find_package(PkgConfig REQUIRED)
pkg_check_modules(python REQUIRED IMPORTED_TARGET python3)
add_library(speedup SHARED src/speedup.cpp)
target_link_libraries(speedup PkgConfig::python)

View File

@ -0,0 +1,60 @@
#include <Python.h>
#include <print>
int test = 0;
PyObject* my_stat_counter(PyObject* self, PyObject* args) {
size_t to_add;
if (!PyArg_ParseTuple(args, "k", &to_add)) {
return (PyObject*)NULL;
}
// PyObject* state = Py_None;
auto mod_shit = (size_t*)PyModule_GetState(self);
if (mod_shit == NULL) {
std::println("heheheh fuck you");
return (PyObject*)NULL;
}
*mod_shit += to_add;
return PyLong_FromSize_t(*mod_shit);
}
static PyMethodDef MyStatMethods[] = {
{
"my_stat_counter",
my_stat_counter,
METH_VARARGS,
"Python interface for speedup",
},
{NULL, NULL, 0, NULL},
};
#ifdef Py_mod_exec
static struct PyModuleDef_Slot mod_slots[] = {
{Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED},
{Py_mod_gil, Py_MOD_GIL_NOT_USED},
{0, NULL},
};
#endif
static struct PyModuleDef mod_def = {
PyModuleDef_HEAD_INIT, /* m_base */
"speedup", /* m_name */
"Python interface for speedup module", /* m_doc */
sizeof(size_t), /* m_size */
MyStatMethods, /* m_methods */
#ifdef Py_mod_exec
mod_slots, /* m_slots */
#else
NULL,
#endif
NULL, /* m_traverse */
NULL, /* m_clear */
NULL, /* m_free */
};
PyMODINIT_FUNC PyInit_libspeedup(void) {
return PyModuleDef_Init(&mod_def);
}

View File

@ -0,0 +1,35 @@
from concurrent import interpreters
from libspeedup import my_stat_counter
def calc():
my_stat_counter(2)
my_stat_counter(2)
a = my_stat_counter(2)
print(a)
def main():
my_stat_counter(1)
my_stat_counter(1)
int1 = interpreters.create()
int2 = interpreters.create()
int3 = interpreters.create()
t1 = int1.call_in_thread(calc)
t2 = int2.call_in_thread(calc)
t3 = int3.call_in_thread(calc)
t1.join()
t2.join()
t3.join()
int1.close()
int2.close()
int3.close()
print(my_stat_counter(1))
if __name__ == "__main__":
main()

View File

@ -0,0 +1,17 @@
+++
title = "Python speedup with rust"
weight = 1
date = "2025-09-02"
[extra]
preview_image = "posts/kube-intro/preview.png"
+++
<!-- ![Intro](./imgs/intro.png) -->
## Why care
It's no secret that python is slow. Because it's interpreted language.
But there is a solution for that problem.
Python has ABI for loading modules built with C.

View File

@ -42,7 +42,7 @@ pre tt {
pre {
max-height: 40em;
padding: 0.7em 1.1em;
padding: 0em;
overflow: auto;
overflow-y: auto;
overflow-x: scroll;
@ -67,7 +67,8 @@ pre {
}
code {
padding: 0;
display: block;
padding: 0.7em;
margin: 0;
table {
@ -81,7 +82,7 @@ pre {
}
code[data-name] {
display: block;
position: relative;
padding-top: 2em !important;
&::before {
@ -90,10 +91,10 @@ pre {
font-weight: bold;
top: 0;
left: 0;
padding-left: 1em;
padding-top: 0.7em;
padding-left: 0.7em;
padding-top: 0.2em;
width: 100%;
background-color: $midnightblue;
background-color: $highlight-grey;
z-index: 1;
color: $text;
}

View File

@ -42,22 +42,24 @@
{% endif %}
<meta name="twitter:card" content="summary_large_image" />
{% if page.extra and page.extra.image %}
<meta property="og:image" content="{{get_url(path=page.extra.image)}}" />
<meta property="og:image:width" content="{{page.extra.image_width}}" />
<meta property="og:image:height" content="{{page.extra.image_height}}" />
{% if page.extra and page.extra.preview_image %}
{% set meta = get_image_metadata(path=page.extra.preview_image) %}
<meta property="og:image" content="{{get_url(path=page.extra.preview_image)}}" />
<meta property="og:image:width" content="{{meta.width}}" />
<meta property="og:image:height" content="{{meta.height}}" />
<meta name="twitter:image" content="{{get_url(path=page.extra.image)}}" />
<meta name="twitter:image:width" content="{{page.extra.image_width}}" />
<meta name="twitter:image:height" content="{{page.extra.image_height}}" />
<meta name="twitter:image" content="{{get_url(path=page.extra.preview_image)}}" />
<meta name="twitter:image:width" content="{{meta.width}}" />
<meta name="twitter:image:height" content="{{meta.height}}" />
{% else %}
<meta property="og:image" content="{{get_url(path='preview.png')}}" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="720" />
{% set meta = get_image_metadata(path=config.extra.preview_image) %}
<meta property="og:image" content="{{get_url(path=config.extra.preview_image)}}" />
<meta property="og:image:width" content="{{meta.width}}" />
<meta property="og:image:height" content="{{meta.height}}" />
<meta name="twitter:image" content="{{get_url(path='preview.png')}}" />
<meta name="twitter:image:width" content="1200" />
<meta name="twitter:image:height" content="720" />
<meta name="twitter:image" content="{{get_url(path=config.extra.preview_image)}}" />
<meta name="twitter:image:width" content="{{meta.width}}" />
<meta name="twitter:image:height" content="{{meta.height}}" />
{% endif %}
<!-- Twitter/X -->
@ -119,33 +121,6 @@
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/auto-render.min.js" integrity="sha384-kWPLUVMOks5AQFrykwIup5lo0m3iMkkHrD0uJ4H5cjeGihAutqP0yW0J6dpFiVkI" crossorigin="anonymous"
onload="renderMathInElement(document.body, { delimiters: [ {left: '$$', right: '$$', display: true}, {left: '$', right: '$', display: false}, {left: '\\[', right: '\\]', display: true}, {left: '\\(', right: '\\)', display: false}]});"></script>
{% if config.extra.highlightjs.enable %}
<link href="https://unpkg.com/highlightjs-badge/highlightjs/styles/{{config.extra.highlightjs.theme}}.css" rel="stylesheet">
<!-- https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@10.1.1/build/styles/ for min version -->
<script src="https://unpkg.com/highlightjs-badge/highlightjs/highlight.pack.js"></script>
<script src="https://unpkg.com/highlightjs-badge/highlightjs-badge.min.js"></script>
<script>
var pres = document.querySelectorAll("pre>code");
for (var i = 0; i < pres.length; i++) {
hljs.highlightBlock(pres[i]);
}
</script>
{% if config.extra.highlightjs.clipboard %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js"></script>
<script>
var options = {
copyIconClass: "gg-clipboard",
checkIconClass: "gg-check"
};
window.highlightJsBadge(options);
</script>
{% endif %}
{% endif %}
{% if not config.extra.highlightjs.enable %}
<script src="{{get_url(path="js/copy.js")}}"></script>
{% endif %}
<script src="{{get_url(path="js/main.js")}}"></script>
{% block js_footer %}

View File

@ -11,6 +11,7 @@ ingress:
annotations:
cert-manager.io/cluster-issuer: cert-issuer
external-dns.alpha.kubernetes.io/hostname: s3rius.blog
external-dns.alpha.kubernetes.io/cloudflare-proxied: "false"
tls:
- hosts:
- s3rius.blog