Skip to content

Instantly share code, notes, and snippets.

View iximiuz's full-sized avatar
🪲

Ivan Velichko iximiuz

🪲
View GitHub Profile
i => j1 = 2*i           0 => 0     1 => 2    2 => 4
     j2 = 2*i+1         0 => 1     1 => 3    2 => 5

i = j//2                0 => 0     2 => 1    4 => 2
                        1 => 0     3 => 1    5 => 2


i => j1 = 2*i + 1       0 => 1    1 => 3    2 => 5
 j2 = 2*i + 2 0 => 2 1 => 4 2 => 6
@iximiuz
iximiuz / README.md
Last active July 6, 2023 11:52
execve() file descriptors sharing example

Description

As everybody knows, execve() system call replaces a calling process image with a new process image. At the same time the file descriptors table remains the same.

The idea of this example is to show how launched via execve() processes can access file descriptors from their parent.

The parent process creates 4 pipes (unidirectional data flows) for stdin/stdout streams of its two children. Then the parent forks itself twice to spawn its children. Each child process binds corresponding pipes to its stdin & stdout and then runs child executable via execl(). To simplify the example, child processes also explicitly shares their stdin file descriptors between each other via command line argument. In the end parent is able to read from children stdouts and write to their stdins, while children are able to write to sibling's stdins (see the schema below).

@iximiuz
iximiuz / rvo_bench.cpp
Last active August 19, 2016 13:14
C++ Return value optimization benchmark
#include <chrono>
#include <iostream>
#include <stdlib.h>
#include <time.h>
#define SIZE_MEDIUM 4096
#define SIZE_LARGE 16*4096
#define ITER_COUNT 100000
using namespace std;
using namespace std::chrono;
@iximiuz
iximiuz / binomial_coefficients.py
Created June 8, 2016 16:40
Calculate binomial coefficients via Pascal's triangle
def next_row(prev_row):
row = [prev_row[0]] * (len(prev_row) + 1)
for idx in range(len(prev_row) - 1):
row[idx + 1] = (prev_row[idx] + prev_row[idx + 1])
return row
def binomial(n, k, cache=None):
""" Calculates binomial coefficients using Pascal's triangle.
0 1
@iximiuz
iximiuz / diff.txt
Created May 19, 2016 11:27
Python 2 vs Python 3 division operator
Input | Py2 | Py3
----------+-----+-----
5/2 | 2 | 2.5
----------+-----+-----
5//2 | 2 | 2
----------+-----+-----
5.0/2 | 2.5 | 2.5
----------+-----+-----
5.0//2 | 2.0 | 2.0
----------+-----+-----
@iximiuz
iximiuz / goaccess.md
Created May 16, 2016 11:57
Analyze Nginx access log with GoAccess

Run:

grep "07/May/2016" app_access.log | goaccess -a --log-format '%h %^[%d:%t %^] "%r" %s %b "%R" "%u"' --date-format '%d/%b/%Y' --time-format '%H:%M:%S' > goaccess_may07.html

More here

@iximiuz
iximiuz / mean_median_mode_stddev.py
Last active August 15, 2018 09:45
Mean, median, mode and stddev calculation in Python 3
sample = [5, 3, 1, 2, 4]
n = len(sample)
mean = sum(sample)/n
median = (sample[n//2 - (n + 1)%2] + sample[n//2])/2
stddev = (sum((e - mean)**2 for e in sample)/n)**0.5
cnt = {}
for e in sample:
cnt[e] = cnt.get(e, 0)
cnt[e] += 1
mode = sorted(cnt.keys(), key=lambda e: (cnt[e], -e))[-1]
@iximiuz
iximiuz / delayserver.py
Created March 25, 2016 11:41
Simple async HTTP server to emulate long request processing
import sys
from asyncio import coroutine, sleep
from aiohttp import web
@coroutine
def handle(request):
seconds = float(request.match_info.get('seconds', 1))
yield from sleep(seconds)
text = "You've been waiting for {} seconds".format(seconds)
return web.Response(body=text.encode('utf-8'))
@iximiuz
iximiuz / python_parse_set_cookie_headers.py
Last active August 14, 2018 01:55
Parse Set-Cookie headers in Python
@iximiuz
iximiuz / flask_static_files_cache_invalidator.py
Last active October 28, 2019 18:56
Flask: add static file's cache invalidator param to URLs generated by url_for(). Blueprints aware.
""" Inspired by http://flask.pocoo.org/snippets/40/ """
app = Flask(__name__)
@app.url_defaults
def hashed_url_for_static_file(endpoint, values):
if 'static' == endpoint or endpoint.endswith('.static'):
filename = values.get('filename')
if filename:
if '.' in endpoint: # has higher priority