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
const fs = require('fs'); | |
const path = require('path'); | |
async function *walkdir(dir) { | |
const stack = [dir]; | |
while (stack.length) { | |
const filename = stack.pop(); | |
const stat = await fs.promises.stat(filename); | |
if (stat.isDirectory()) { | |
const files = (await fs.promises.readdir(filename)) |
const http = require('http'); | |
const log = console.log; | |
console.log = (...args) => { | |
log.apply(console, [new Date().toISOString()].concat(args)); | |
}; | |
const port = process.argv[2]; | |
const server = http.createServer((req, res) => { | |
console.log('Incoming request'); |
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).
#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; |
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 |
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 | |
----------+-----+----- |
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
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] |
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')) |