Skip to content

Instantly share code, notes, and snippets.

@righ
righ / zigzag_sorted.py
Created June 8, 2019 03:06
It returns list sorted in zigzag.
def zigzag_sorted(iterable, key=None):
"""It returns list sorted in zigzag.
:rtype: generator object (iterator)
>>> list(zigzag_sorted([1, 2, 3, 4, 5, 6, 7]))
[1, 7, 2, 6, 3, 5, 4]
"""
i = 0
l = sorted(iterable, key=key)
n = len(l)
@righ
righ / arraytools.ts
Last active June 16, 2020 15:55
Array tools in TypeScript
export const range = (start: number, stop: number, step: number=1) => {
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Sequence_generator_(range)
return Array.from({ length: (stop - start - 1) / step + 1}, (_, i) => start + (i * step));
}
export const all = (values: any[]) => {
for (let value of values) {
if (!value) {
return false;
}
@righ
righ / pbkdf2.js
Last active August 1, 2020 07:20
pbkdf2 password hasher like django
const { pbkdf2Sync } = require('crypto');
export const validate = (raw, password, len=32) => {
const [method, iterations, salt, hash] = password.split('$');
const digest = method.split("_")[1];
return pbkdf2Sync(raw, salt, parseInt(iterations, 10), len, digest).toString('base64') === hash;
};
export const make = (raw, iterations, digest="sha256", salt="", len=32) => {
if (salt === "") {
@righ
righ / lambda_function.py
Last active January 13, 2022 11:29
Lambda function for Sentry to Slack webhook
import json
import urllib.request
WEBHOOK_URL = "https://hooks.slack.com/services/XXXXXXXXXX/YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"
MESSAGE_TEMPLATE = """<{url}|{message}>"""
def lambda_handler(event, context):
post(event)
return {"statusCode": 200}