Skip to content

Instantly share code, notes, and snippets.

View danbst's full-sized avatar

Danylo Hlynskyi danbst

  • Ivano-Frankivsk, Ukraine
View GitHub Profile
@danbst
danbst / uuid-bloom.sql
Created April 27, 2019 10:40
Postgresql UUID Bloom index support (best for UUIDv4) (https://www.postgresql.org/docs/current/bloom.html)
create extension "uuid-ossp";
-- https://www.postgresql.org/docs/current/bloom.html
create extension bloom;
CREATE or replace FUNCTION hashuuid(u uuid) RETURNS integer AS $$
DECLARE
a bytea := uuid_send(u);
BEGIN
RETURN (get_byte(a, 3) << 24) + (get_byte(a, 2) << 16) + (get_byte(a, 1) << 8) + get_byte(a, 0);
END;
@danbst
danbst / background-script.js
Created March 30, 2019 18:06
Firefox extension, which tracks time spent in Facebook and tells it to you INSTANTLY.
timeSpent = 0;
timeStarts = 0
browser.tabs.onActivated.addListener((activeInfo) => {
browser.tabs.sendMessage(
activeInfo.tabId,
{timeSpent: timeSpent}
).then(response => {
timeStarts = (new Date).getTime();
}).catch(error => {
let
sub = { config, lib, parentConfig, ...}: {
options.foo = lib.mkOption {
type = lib.types.bool;
default = parentConfig.bar;
};
};
in { config, lib, ...}: {
options.bar = lib.mkOption { type = lib.types.bool; default = true; };
@danbst
danbst / all-packages.nix
Created January 19, 2019 11:20
Overlays in nixpkgs!
...
inherit (import ../servers/sql/postgresql-default.nix pkgs super)
postgresql
postgresqlPackages
postgresql_9_4
postgresql_9_5
postgresql_9_6
postgresql_10
postgresql_11
@danbst
danbst / idea.md
Last active May 27, 2020 07:35
Nixos need a replacement for nixos-rebuild!

nixos executable

Basic features:

  • installable as package, even on non-nixos
  • is named nixos
  • is written in C++ and binds to Nix C++ library (or maybe Haskell? Nodejs? What you think?)
  • autocomplete, ncurses, Nix 2.0
  • commit to Git by default on each rebuild

Subcommands

@danbst
danbst / imperative-env.sh
Last active January 15, 2024 22:55
Imperative nix-env rewrite (so it becomes declarative)
#!/usr/bin/env bash
statefile=~/.config/nixpkgs/declarative
action="$1"
package="$2"
mkdir -p $(dirname "$statefile")
touch "$statefile"
function update {
envExpr=~/.config/nixpkgs/declarative-env.nix

VACUUM FREEZE

Our database has fast rate of transactions. I did think, that such rate is impossible, until I've seen it with my eyes. I've been instinctively insisting on fixing code to reduce number of transactions (sometimes successful), but never checked what are consequences for database.

One of consequences is fast rate of autovacuum VACUUM FREEZE.

VACUUM is essential for Postgresql to mark non-visible rows (those which were normal rows, but became invisible because of update or delete) as visible to PG. Note, that they become visible only to PG, previously PG didn't know they are free for use, and thus had allocated extra buffers in the end of a table for any new rows (inserts or updates). PG not knowing which rows are free for use is another problem, which causes table bloat, which deserves another post.

VACUUM FREEZE is special kind of VACUUM. From resource usage perspective, it differs from VACUUM by that it has to scan full table (normal VACUUM processes only buffers known to contain at

@danbst
danbst / iphone.nix
Created September 8, 2018 20:05
iPhone pairing for NixOS
# First add this module to your /etc/nixos/configuration.nix
# ...
# imports = [ /path/to/iphone.nix ];
# iphone.enable = true;
# iphone.user = "yourusername";
# ...
# Then rebuild system. Attach iPhone via cable, open terminal and run command `iphone`
# It will fail, but there will occure a dialog on your iPhone to "trust this computer"
# Press OK there and run `iphone` again. If it succeeds it will open a freshly mounted folder
@danbst
danbst / bash-curl-pup-jq-notifysend-nix.md
Created July 19, 2018 06:22
Bash. Curl. Pup. Jq. Notify-send. Nix

Цей список складений з технологій (утиліт Linux), які я використаю для однієї життєвої ситуації - пошуку аренди квартири по риночній ціні.

Знайомим з поняттям "скрейпінг" мабуть уже зрозуміло, про що буде пост. Тим не менше, запрошую під кат.

Постановка задачі

OLX є, здається, найактивнішою площадкою для пошуку аренди квартири у Києві. Але просто зайти на OLX, задати фільтри (район, кількість кімнат) недостатньо. Справа в тім, що є 3 типи аренд:

  • аренди від ріелторів - ціни на ці квартири майже завжди завищені, тому-що від ціни квартири залежить дохід ріелтора. Через завищену вартість (неринкову) афіші висять відносно довго
  • аренди від хазяїв - ціни на квартири нижчі, щоб швидше знаходити арендаторів
@danbst
danbst / default.nix
Created July 13, 2018 07:59
Proof-of-Concept running PostgreSQL tests inside Nix package build
with import <nixpkgs> { };
runCommand "some-test" {
buildInputs = [ postgresql ];
preCheck = ''
set -e
export PGDATA=$TMP/db
export PGHOST=$TMP/socketdir
mkdir $PGDATA $PGHOST
pg_ctl initdb
echo "unix_socket_directories = '$PGHOST'" >> $PGDATA/postgresql.conf