Skip to content

Instantly share code, notes, and snippets.

View ochaton's full-sized avatar

Vladislav Grubov ochaton

  • Tarantool
  • Moscow, Russia
View GitHub Profile
func partition(nums1 []int, nums2 []int) (int, int) {
n1 := len(nums1)
n2 := len(nums2)
half := (n1+n2) >> 1
// n1 ≤ n2 => n1 ≤ half=(n1+n2)>>1 ≤ n2
// i want to have left part ≤ right part
// now, I split nums1 and nums2 in a way such as:
// [0;m1)+[m1;n1+1) and [0;m2)+[m2;n2+1)
func listenUnix(socket_path string) (*net.UnixListener, error) {
addr, err := net.ResolveUnixAddr("unix", socket_path)
if err != nil {
return nil, err
}
fi, err := os.Lstat(socket_path)
switch {
case os.IsNotExist(err):
return net.ListenUnix("unix", addr)
@ochaton
ochaton / base.lua
Created May 1, 2025 12:56
base.lua - compact base oop, inheritance is a main banger
local setmetatable, type, pairs, rawget = setmetatable, type, pairs, rawget
local copy do
pcall(require, 'table.new')
local table_new = rawget(table, 'new') or function(_, _) return {} end
function copy(t)
local new_t = table_new(0, 8)
for k, v in pairs(t) do new_t[k] = v end
return new_t
@ochaton
ochaton / core_modules.pl
Created April 9, 2025 02:24
Perl script which prints out which core modules are installed with their help
use strict;
use warnings;
use feature 'say';
use Module::CoreList;
use Pod::Simple::SimpleTree;
use List::Util qw(first);
# 1 - only standard level modules
# 2 - mostly all packages
# 3 - subpackages of packages

Weird EV-loop behaviour

I've recently discovered weird behaviour of EV-loop timers.

First in Tarantool, and now in Perl libev.

Subj:

When asking EV-loop to sleep for 1ms, it does 1.2ms when requesting to sleep for 2ms, it does 2.4ms,

@ochaton
ochaton / cluster-config-json-schema.lua
Last active September 6, 2024 11:49
Generate JSON schema for Tarantool's cluster configuration by @Totktonada
#!/usr/bin/env tarantool
local json = require('json')
local cluster_config = require('internal.config.cluster_config')
local scalars = {}
scalars.string = {
jsonschema = {
type = 'string',
@ochaton
ochaton / lib.rs
Created September 5, 2024 20:04
Rust stored Proc registration without Lua
use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use tarantool::{self, session, tuple::Encode};
use mlua::Lua;
#[tarantool::proc]
fn add(left: i64, right: i64) -> i64 {
left + right
}
-- Tarantool 3.0.2-0-gf9e82c5 Darwin-arm64-RelWithDebInfo
local fiber = require 'fiber'
local clock = require 'clock'
local log = require 'log'
box.cfg{checkpoint_count = 1,listen=3301}
box.ctl.promote()
require 'jit'.on()
fiber.top_enable()
@ochaton
ochaton / cpu_limit.lua
Created April 28, 2024 01:08
PoC: cpu_limit method for luafun iterator inside Tarantool to allow automatic control of yields
--[[
cpu limit is like leaking bucket.
we say that we want to limit this iterator to consume ≤10% cpu.
Caller:
- ev(), real()
- gen_x(param_x, state_x)
- ev(), real()
local fiber = require 'fiber'
local clock = require 'clock'
local fun = require 'fun'
require 'jit'.on()
fiber.top_enable()
local COLLECT_INTERVAL = 1
fiber.create(function()
fiber.name("monitor")