Skip to content

Instantly share code, notes, and snippets.

View pasierb's full-sized avatar
🐢

Michał Pasierbski pasierb

🐢
View GitHub Profile
@pasierb
pasierb / .dockerignore
Created September 6, 2017 14:00 — forked from webmatze/.dockerignore
Docker + Rails + Puma + Postgres + Nginx
.git
.gitignore
doc
.yardoc
coverage
jsdoc
tmp
log
README.md
public/uploads/
@pasierb
pasierb / pg_repack_install.sh
Last active November 9, 2017 12:47
pg_repack install script
apt-get update && apt-get install -y -qq libpq-dev postgresql-server-dev-all postgresql-9.4-repack
--fix-missing --no-install-recommends
psql -c "CREATE EXTENSION IF NOT EXISTS pg_repack" -d $1 -U postgres
@pasierb
pasierb / index.js
Last active February 12, 2018 22:01
index array of objects by property
const arr = [
{ id: "a", foo: "aaaaa", bar: "AA" },
{ id: "b", foo: "bbbbb", bar: "BB" },
{ id: "c", foo: "ccccc", bar: "CC" }
];
const obj = arr.reduce((sum, e) => Object.assign(sum, {[e.id]: e}), {});
@pasierb
pasierb / Formtastic.js
Last active February 13, 2018 23:54
Vue.js schema fieldset generator
import Vue from 'vue';
const fireEvent = (name, ctx, args) => {
ctx.data.on && ctx.data.on[name] && ctx.data.on[name].apply(null, args);
}
const createInput = (h, ctx, item) => ({
'text': createTextInput,
'checkbox': createCheckboxInput
}[item.type || 'text'](h, ctx, item));
@pasierb
pasierb / README.md
Last active March 28, 2018 07:31
JS Dos and Dont's (mostly dont's)

General JS

  • Don’t use switch statements (they are slow, can lead to bugs if you don’t break or “fail” silently when none of cases match). Use object literals instead, i.e.
// NoNo
switch (expression) {
case 'a': {
  doStuff();
 break;
@pasierb
pasierb / README.md
Created May 31, 2018 05:26
Super simple "Read more" Vue component

ReadMore Vue.js component

<ReadMore :trim-count="20">
  <p>Content to be trimmed, that <strong>can</strong> contain markup</p>
</ReadMore>

TODO

@pasierb
pasierb / index.js
Created October 29, 2019 22:08
Cloudflare worker reducer pattern example
import reduce from './reduce';
import setSessionIdContext from './setSessionIdContext';
import setSessionIdCookie from './setSessionIdCookie';
import setCacheControlHeader from './setCacheControlHeader';
addEventListener('fetch', async (event) => {
const { request: sourceRequest } = event;
let context = {};
const targetRequest = reduce([
@pasierb
pasierb / late-final.dart
Created December 31, 2022 09:32
Dart: late + final + IIFE = easy and safe caching
class Person {
// Potentially expensive calculation.
late final netWorth =
(() => Future.delayed(Duration(seconds: 2), () => 99))();
}
// await person.netWorth
apt install -y unzip php8.3-fpm sqlite3 nodejs npm git nginx php8.3-common php8.3-xml php8.3-sqlite3 php8.3-zip
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/local/bin/composer
phpenmod dom
apt install
apt install
phpenmod dom
@pasierb
pasierb / ProgressContainer.tsx
Created September 27, 2024 19:37
Border progress animation
import React, { useEffect, useRef, useState, useCallback } from 'react';
const strokeColor = 'oklch(var(--ac))';
/**
* Component that serves as a progress indicator.
* It shows a progress bar as if it were a border around the box.
* The progress bar is a percentage of the total size of container sides length.
*/
export default function ProgressContainer({